Appending turns my list to NoneType

狂风中的少年 提交于 2019-11-26 00:55:43

问题


In Python Shell, I entered:

aList = [\'a\', \'b\', \'c\', \'d\']  
for i in aList:  
    print(i)

and got

a  
b  
c  
d  

but when I tried:

aList = [\'a\', \'b\', \'c\', \'d\']  
aList = aList.append(\'e\')  
for i in aList:  
    print(i) 

and got

Traceback (most recent call last):  
  File \"<pyshell#22>\", line 1, in <module>  
    for i in aList:  
TypeError: \'NoneType\' object is not iterable  

Does anyone know what\'s going on? How can I fix/get around it?


回答1:


list.append is a method that modifies the existing list. It doesn't return a new list -- it returns None, like most methods that modify the list. Simply do aList.append('e') and your list will get the element appended.




回答2:


Generally, what you want is the accepted answer. But if you want the behavior of overriding the value and creating a new list (which is reasonable in some cases^), what you could do instead is use the "splat operator", also known as list unpacking:

aList = [*aList, 'e']
#: ['a', 'b', 'c', 'd', 'e']

Or, if you need to support python 2, use the + operator:

aList = aList + ['e']
#: ['a', 'b', 'c', 'd', 'e']

^ There are many cases where you want to avoid the side effects of mutating with .append(). For one, imagine you want to append something to a list you've taken as a function argument. Whoever is using the function probably doesn't expect that the list they provided is going to be changed. Using something like this keeps your function "pure" without "side effects".




回答3:


Delete your second line aList = aList.append('e') and use only aList.append("e"), this should get rid of that problem.



来源:https://stackoverflow.com/questions/3840784/appending-turns-my-list-to-nonetype

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!