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)
有任何想法吗?
对此最常见的答案是使用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个引用列表.当你改变它时,你会看到列表中每个元素的变化 - 因为它们都是相同的.
使用生成器表达式或列表推导时,会为每个子项创建一个新列表,因此每个项都是不同的值.修改一个只影响那一个.
显然,在您的示例中,值是不可变的,因此这并不重要 - 但是对于不同的情况,或者值可能不是不可变的,值得记住.
尝试使用list.extend和乘法运算符列表
l.extend([v] * n)
Run Code Online (Sandbox Code Playgroud)