将相同的值多次附加到列表中

Bsj*_*sje 6 python list append

为了让我的程序更漂亮而不是丑陋,我试图找到一种更多的pythonic方法,可以多次向列表中添加单个值.我现在使用循环,但我创建了一个我不使用的变量.

l = []; n = 5; v = 0.5

for i in xrange(n):
    l.append(v)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

小智 25

要向l添加v,n次:

l += n * [v]
Run Code Online (Sandbox Code Playgroud)


Gar*_*tty 9

对此最常见的答案是使用list.extend()和生成器表达式:

l.extend(generate_value() for _ in range(n))
Run Code Online (Sandbox Code Playgroud)

这将增加一个值n时间.请注意,这将评估generate_value()每次,其他答案可能具有的可变值的侧面问题:

>>> [[1]] * 5
[[1], [1], [1], [1], [1]]
>>> _[0].append(1)
>>> _
[[1, 1], [1, 1], [1, 1], [1, 1], [1, 1]]
>>> [[1] for _ in range(5)]
[[1], [1], [1], [1], [1]]
>>> _[0].append(1)
>>> _
[[1, 1], [1], [1], [1], [1]]
Run Code Online (Sandbox Code Playgroud)

使用乘法方法时,最终会得到对同一列表的n个引用列表.当你改变它时,你会看到列表中每个元素的变化 - 因为它们都是相同的.

使用生成器表达式或列表推导时,会为每个子项创建一个新列表,因此每个项都是不同的值.修改一个只影响那一个.

显然,在您的示例中,值是不可变的,因此这并不重要 - 但是对于不同的情况,或者值可能不是不可变的,值得记住.


Nil*_*ner 6

尝试使用list.extend和乘法运算符列表

l.extend([v] * n)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将生成一个`[v,v,v ...]``n`次的列表,如果值是不可变的,这很好,但如果值是可变的并且您希望它们是可变的,则可能导致意外行为独立. (2认同)