追加操作使我的列表变为NoneType

37 投票
4 回答
89204 浏览
提问于 2025-04-16 04:51

在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'),你的列表就会添加上这个元素。

撰写回答