Pergunta

No Python Shell, entrei:

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

e pegou

a  
b  
c  
d  

Mas quando eu tentei:

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

e pegou

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

Alguém sabe o que está acontecendo? Como posso consertar/contornar isso?

Foi útil?

Solução

list.append é um método que modifica a lista existente. Não retorna uma nova lista - ele retorna None, como a maioria dos métodos que modificam a lista. Simplesmente faça aList.append('e') E sua lista será anexada o elemento.

Outras dicas

Geralmente, o que você deseja é a resposta aceita. Mas se você deseja o comportamento de substituir o valor e criar uma nova lista (que é razoável em alguns casos^), o que você poderia fazer é usar o "operador de splat", também conhecido como List Desepping:

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

Ou, se você precisar apoiar o Python 2, use o + operador:

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

^ Existem muitos casos em que você deseja evitar os efeitos colaterais de mutações com .append(). Por um lado, imagine que você deseja anexar algo a uma lista que você fez como argumento de função. Quem estiver usando a função provavelmente não espera que a lista que eles forneçam seja alterada. Usar algo assim mantém sua função "puro" sem "efeitos colaterais".

Exclua sua segunda linha aList = aList.append('e') e use apenas aList.append("e"), isso deve se livrar desse problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top