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()
,该对象是listL
的一个元素,返回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]
它们是等价的。如果你在谈论性能,你只是在衡量什么。试着看看结果,它不是等价的。事实上,它们不是。更新为与你的稍有不同的替代方案。我更喜欢的是,就是它。