Python: 将条目附加到列表 N 次

这似乎是 Python 会有捷径的东西。我想在列表中追加一个条目 N 次,有效地做到这一点:

l = []
x = 0
for i in range(100):
l.append(x)

在我看来,应该有一种“优化”的方法来解决这个问题,比如:

l.append_multiple(x, 100)

有吗?


如果要重复附加元素 来自另一个序列(而不是相同的值,可以直接使用该序列附加 .extend。见 如何追加到空列表的末尾?

188175 次浏览

你可以用列表内涵做这个

l = [x for i in range(10)];

对于不可变数据类型:

l = [0] * 100
# [0, 0, 0, 0, 0, ...]


l = ['foo'] * 100
# ['foo', 'foo', 'foo', 'foo', ...]

对于通过引用存储的值,您可能希望稍后进行修改(如子列表或字典) :

l = [{} for x in range(100)]

(为什么第一个方法只适用于常量值,如 int 或字符串,是因为在使用 <list>*<number>语法时,只有浅拷贝才适用,因此,如果使用类似 [{}]*100的语法,最终会有100个对同一个字典的引用——所以改变其中一个就会改变所有引用。因为 int 和 string 是不可变的,所以这对它们来说不是问题。)

如果您想要添加到现有的列表中,您可以使用该列表的 extend()方法(结合通过上述技术生成要添加的内容列表) :

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

使用扩展添加一个列表内涵到末端。

l.extend([x for i in range(100)])

See the Python docs for more information.

Itertools 重复与列表扩展相结合。

from itertools import repeat
l = []
l.extend(repeat(x, 100))

为了一个任务我不得不走另一条路但这就是我最后的结果。

my_array += ([x] * repeated_times)
l = []
x = 0
l.extend([x]*100)

你可以像这样多次增加任何值:

a = [1,2,3]
b = []
#if you want to add on item 3 times for example:
for i in range(len(a)):
j = 3
while j != 0:
b.append(a[i])
j-=1
#now b = [1,1,1,2,2,2,3,3,3]