Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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_List Comprehension - Fatal编程技术网

Python列表理解不会返回新列表

Python列表理解不会返回新列表,python,list,list-comprehension,Python,List,List Comprehension,我对列表的列表上的列表理解行为感到惊讶。我希望列表理解始终向我返回一个新列表。例如: >L=[1,2,3,4,5,6] >>>M=[x*2表示L中的x] >>>L >>> [1,2,3,4,5,6] >>>M >>> [2,4,6,8,10,12] 因此,L没有改变 但是, >>>L=[[1]、[2]、[3]] >>>M=[x.append(100)表示L中的x] >>>M >>>[无,无,无] >>>L >>> [[1,100], [2,100], [3,100]] 现在L已更改,并且列

我对
列表
列表
上的
列表理解
行为感到惊讶。我希望
列表理解
始终向我返回一个新列表。例如:

>L=[1,2,3,4,5,6]
>>>M=[x*2表示L中的x]
>>>L
>>> [1,2,3,4,5,6]
>>>M
>>> [2,4,6,8,10,12]
因此,
L
没有改变

但是,


>>>L=[[1]、[2]、[3]]
>>>M=[x.append(100)表示L中的x]
>>>M
>>>[无,无,无]
>>>L
>>> [[1,100], [2,100], [3,100]]
现在L已更改,并且
列表理解
不会返回新列表

我期待着一份新的清单。任何解释都有助于我理解
列表理解的这种行为

x.append(100)

不返回任何内容(None),这就是为什么在M中只有None。x*2是一个计算结果的表达式,其结果将存储在列表
M

x.append(100)
另一方面,在对象
x
上应用函数
append()
,该对象是list
L
的一个元素,返回
None


这是一样的,为什么你要做
y=x*2
,而不是
y=x.append(100)
你要附加到
x
,是
L
中的一个元素,这就是
L
改变的原因。如果您想要一个新列表,而不是一个旧列表,请创建一个新列表

您没有指定您期望的结果,但我相信这正是您想要的:

>>L=[[1]、[2]、[3]]
>>>M=[[*x100]表示L中的x]
>>>L
[[1], [2], [3]]
>>>M
[[1, 100], [2, 100], [3, 100]]

这与列表理解无关
append
始终修改现有列表并返回None。如果您希望返回一个包含追加项的列表,则
[x+[100]for x in L]
注意,理解确实返回了一个新列表。正如许多人提到的。append返回None,但是python允许创建一个新列表并通过执行以下
[x.append(100)或x代表L中的x]
您可能希望(重新)读取。最好将
[x,100]
替换为
x+[100]
它们是等价的。如果你在谈论性能,你只是在衡量什么。试着看看结果,它不是等价的。事实上,它们不是。更新为与你的稍有不同的替代方案。我更喜欢的是,就是它。