追加操作使我的列表变为NoneType
在Python的命令行中,我输入了:
aList = ['a', 'b', 'c', 'd']
for i in aList:
print(i)
然后得到了
a
b
c
d
但是当我尝试:
aList = ['a', 'b', 'c', 'd']
aList = aList.append('e')
for i in aList:
print(i)
却得到了
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
for i in aList:
TypeError: 'NoneType' object is not iterable
有没有人知道这是怎么回事?我该怎么解决或者绕过这个问题呢?
4 个回答
5
一般来说,你可能想要的是被接受的答案。但是如果你想要覆盖原来的值并创建一个新列表(在某些情况下这样做是合理的^),你可以使用“展开运算符”,也叫做列表解包:
aList = [*aList, 'e']
#: ['a', 'b', 'c', 'd', 'e']
或者,如果你需要支持 Python 2,可以使用 +
运算符:
aList = aList + ['e']
#: ['a', 'b', 'c', 'd', 'e']
^ 有很多情况下,你可能想避免使用 .append()
造成的副作用。比如,想象一下你要往一个作为函数参数传入的列表里添加东西。使用这个函数的人可能并不希望他们提供的列表会被改变。使用这样的方式可以让你的函数保持“纯粹”,没有“副作用”。
5
把你第二行的代码 aList = aList.append('e')
删除掉,只用 aList.append("e")
这一行就可以了,这样就能解决那个问题。
58
list.append
是一个用来修改已有列表的方法。它不会返回一个新的列表,而是返回 None
,就像大多数修改列表的方法一样。你只需要执行 aList.append('e')
,你的列表就会添加上这个元素。