创建一组相同数字的高效方法是什么?

6
什么是创建相同元素数量为n的列表最有效的方式?

你是真的在询问“最有效的方法”,还是任何正确的方法都可以? - Robᵩ
1个回答

17
number = 1
elements = 1000

thelist = [number] * elements

>>> [1] * 10
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

注意:不要试图像这样复制可变对象(尤其是嵌套列表),否则会发生以下情况:

In [23]: a = [[0]] * 10

In [24]: a
Out[24]: [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]

In [25]: a[0][0] = 1

In [26]: a
Out[26]: [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
如果您正在使用numpy,对于多维列表,numpy.repeat是您的最佳选择。它可以在不同的轴上重复所有形状的数组。

2
问题也被标记为numpy,所以可能要提到numpy.repeat(1, 10)吗?(尽管在n非常大时,它会比乘以列表慢。) - DSM
2
请注意,这可能会产生意想不到的结果(取决于您对Python变量工作方式的了解程度),特别是对于可变类型 - 它会生成对同一对象的引用列表。 - Gareth Latty
1
为了尊重numpy标签,对于更高的元素值,a = np.empty((elements,), dtype=np.int); a.fill(number)[number] * elements 更快。但返回的不是真正的列表。 - Jaime
2
@Jaime:还要注意,empty + fillrepeat 更快。 - Warren Weckesser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接