Python中使用列表的extend意外行为
我正在尝试理解Python中的extend是怎么工作的,但它的表现和我预期的有点不一样。例如:
>>> a = [1, 2, 3]
>>> b = [4, 5, 6].extend(a)
>>> b
>>>
但我本来期待的是:
[4, 5, 6, 1, 2, 3]
为什么它返回的是None,而不是扩展列表呢?
5 个回答
6
其他人提到过很多关于 list
的方法,特别是那些会改变列表内容的方法,它们返回的是 None
而不是列表的引用。这样做的原因是为了避免你搞混是否创建了列表的副本。如果你可以写 a = b.extend([4, 5, 6])
,那么 a
是不是和 b
指向同一个列表呢?那 b
被这个语句修改了吗?因为这些方法返回 None
而不是修改后的列表,这样一来,你很快就会发现 a
里并没有你以为的内容,你也就学会了直接写 b.extend(...)
。这样一来,混淆就消除了。
11
list
的方法大多数都是直接在原来的列表上进行操作的,而不是创建一个新的列表,并且它们的返回值通常是None
。
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> b.extend(a)
>>> b
[4, 5, 6, 1, 2, 3]
43
extend()
方法是用来把一些新元素加到已有的数组后面,并且它不会返回任何东西,返回值是 None
。在你的例子中,你是临时创建了一个数组 [4, 5, 6]
,然后把它扩展了一下,但最后又把它丢掉了。所以,变量 b
最后得到的就是 None
。