Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将同一值多次附加到列表中_Python_List_Append - Fatal编程技术网

Python 将同一值多次附加到列表中

Python 将同一值多次附加到列表中,python,list,append,Python,List,Append,为了使我的程序更加美观,而不是丑陋,我正试图找到一种更具python风格的方法,将单个值多次添加到列表中。我现在使用循环,但我创建了一个不用的变量 l = []; n = 5; v = 0.5 for i in xrange(n): l.append(v) 有什么想法吗?尝试使用list。扩展和列表的乘法运算符 l.extend([v] * n) 试试这个 n = 5 v = 0.5 l = [v]*n 要将v(n次)添加到l: l += n * [v] 对此,最普遍的答案是

为了使我的程序更加美观,而不是丑陋,我正试图找到一种更具python风格的方法,将单个值多次添加到列表中。我现在使用循环,但我创建了一个不用的变量

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

for i in xrange(n):
    l.append(v)

有什么想法吗?

尝试使用
list。扩展
和列表的乘法运算符

l.extend([v] * n)
试试这个

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

要将v(n次)添加到l:

l += n * [v]

对此,最普遍的答案是使用和:

这将添加一个值
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]]
当使用乘法方法时,您将得到一个对同一列表的n个引用的列表。当您更改它时,您会看到列表中每个元素的更改,因为它们都是相同的

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


显然,在您的示例中,值是不可变的,所以这并不重要-但是对于不同的情况,或者如果值可能不是不可变的,则值得记住。

注意,这将生成一个
[v,v,v..]
n
次的列表,如果值是不可变的,则这很好,但如果值是可变的,并且您希望它们是独立的,则可能会导致意外行为。请注意,如果
v
是可变对象,则可能会导致意外结果。如果您知道
v
是可变的,则应改为使用
[v.copy()]*n
。@NilsWerner这将不起作用。它将复制该值一次,然后列出对该副本的
n
引用。哦,你说得对。没想到…那会定义l,而不是附加到它上面。如果我已经保存了值,它们将丢失。谢谢大家,Lattyware提供了最一般的答案,尽管我将在这个特定情况下使用Boo的解决方案;)作为
生成_值()的替代方法;在大多数情况下,您还可以使用
copy.deepcopy()
@LieRyan“在大多数情况下”是强的-在大多数情况下,您可能只是在那里放置一个构造函数调用或一个文本,因此无需复制
copy.deepcopy()
也只适用于实现
\uuuu deepcopy\uuuu()
的东西,这不是保证
generate_value()
是一个占位符,用于显示可以使用任何产生值的东西,包括但不限于
copy.deepcopy()
>>> [[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]]