Python:追加项目以列出N次


91

这似乎是Python的捷径。我想将项目附加到列表N次,有效地做到这一点:

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

在我看来,应该为此采用一种“优化”的方法,例如:

l.append_multiple(x, 100)

在那儿?


9
结束了去l.extend([x] * 100),因为它适合我的情况最好。琥珀色因其最全面而广受好评。谢谢!
Toji

4
在将其用于任何不重要的事情之前,请确保您了解Python的参考语义。附加到l的x都是相同的x,因此,对其中一个进行突变会影响所有这些(它们全部被引用100次)。
Karl Knechtel

1
为了澄清:我将其用于整数,因此我的用法是安全的。
Toji

Answers:


132

对于不可变数据类型:

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

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

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

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

(之所以第一种方法只适合于常量值(例如ints或字符串),是因为使用<list>*<number>语法时仅进行浅表复制,因此,如果执行类似的操作[{}]*100,最终将获得100个引用到同一个字典中-因此更改其中之一将全部更改。由于int和字符串是不可变的,因此这对他们来说不是问题。)

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

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

1
或将两个建议合并为您要在b中重复元素的时间a.extend(b*n)所在的形式n
DarkCygnus

26

使用扩展将列表理解添加到末尾。

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

有关更多信息,请参见Python文档


6

我不得不走另一条路去做作业,但这就是我最终的目的。

my_array += ([x] * repeated_times)

5

Itertools重复结合列表扩展。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.