Применение превращает мой список на нето

StackOverflow https://stackoverflow.com/questions/3840784

  •  27-09-2019
  •  | 
  •  

Вопрос

В Python Shell я вошел:

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  

Кто-нибудь знает, что происходит? Как я могу исправить / обойти это?

Это было полезно?

Решение

list.append это метод, который изменяет существующий список. Это не возвращает новый список - он возвращает None, Как и большинство методов, которые изменяют список. Просто сделать aList.append('e') И ваш список получит элемент прилагаемый.

Другие советы

Как правило, что вы хотите, является принятым ответом. Но если вы хотите поведение переопределения значения и созданию нового списка (который разумно в некоторых случаях ^), то, что вы можете сделать вместо этого, используют «Оператор SPLAT», также известный как распакованный список:

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

Или, если вам нужно поддержать Python 2, используйте + Оператор:

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

^ Есть много случаев, когда вы хотите избежать побочных эффектов мутации с .append(). Отказ Для одного представить, вы хотите добавить что-то в список, который вы взяли в качестве функционального аргумента. Кто бы ни использовал функцию, вероятно, не ожидает, что список, который они предоставлены, будет изменен. Использование чего-то вроде этого сохраняет вашу функцию "чистый" без "побочные эффекты".

Удалить вашу вторую строку aList = aList.append('e') и использовать только aList.append("e"), Это должно избавиться от этой проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top