Python中使用列表的extend意外行为

31 投票
5 回答
16711 浏览
提问于 2025-04-17 02:47

我正在尝试理解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

撰写回答