Применение превращает мой список на нето
Вопрос
В 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")
, Это должно избавиться от этой проблемы.