使用Python中的列表扩展的意外行为

Tim*_*man 18 python arrays list immutability

我试图理解扩展如何在Python中工作,它并没有完全按照我的期望.例如:

>>> a = [1, 2, 3]
>>> b = [4, 5, 6].extend(a)
>>> b
>>> 
Run Code Online (Sandbox Code Playgroud)

但我原以为:

[4, 5, 6, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

为什么返回None而不是扩展列表?

Mar*_*tos 27

extend()方法附加到现有数组并返回None.在您的情况下,您正在创建一个数组[4, 5, 6]- 在运行中,扩展它然后丢弃它.变量b以返回值结束None.


Ign*_*ams 6

list方法在大多数情况下就地运行并返回None.

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> b.extend(a)
>>> b
[4, 5, 6, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)


kin*_*all 5

其他人指出了许多list方法,特别是那些改变列表的方法,返回None而不是对列表的引用。他们这样做的原因是这样您就不会对是否制作了列表副本感到困惑。如果您可以写,a = b.extend([4, 5, 6])那么是a对与b? 被b语句修改了吗?通过返回None而不是变异列表,这样的语句变得毫无用处,你很快就会发现其中a没有你认为它做了什么,然后你学会了只写b.extend(...)。因此消除了缺乏清晰度。