Как добавить в конец пустого списка?
У меня есть список:
list1=[]
длина списка не определена, поэтому я пытаюсь добавить объекты в конец списка1, например:
for i in range(0, n):
list1=list1.append([i])
Но мой вывод продолжает давать эту ошибку: AttributeError: объект "NoneType" не имеет атрибута "добавить"
Это потому, что list1 начинается как пустой список? Как исправить эту ошибку?
Ответы
Ответ 1
append
фактически изменяет список. Кроме того, требуется элемент, а не список. Следовательно, все, что вам нужно, это
for i in range(n):
list1.append(i)
(Кстати, обратите внимание, что в этом случае вы можете использовать range(n)
.)
Я предполагаю, что ваше фактическое использование более сложное, но вы можете использовать понимание списка, которое для этого более питонова:
list1 = [i for i in range(n)]
Или, в этом случае, в Python 2.x range(n)
на самом деле создает список, который вы хотите уже, хотя в Python 3.x вам нужно list(range(n))
.
Ответ 2
Вам не нужен оператор присваивания. append возвращает None.
Ответ 3
Микола имеет правильный ответ, но немного больше объяснений. Он будет работать в первый раз, но поскольку append возвращает None
, после первой итерации цикла for ваше присваивание приведет к list1
равному None
, и поэтому ошибка будет выбрана на второй итерации.
Ответ 4
append
возвращает None, поэтому на второй итерации вы вызываете метод append
из NoneType. Просто удалите назначение:
for i in range(0, n):
list1.append([i])
Ответ 5
Я лично предпочитаю оператор +
, чем append
:
for i in range(0, n):
list1 += [[i]]
Но это каждый раз создает новый список, поэтому может быть не лучшим, если производительность критическая.
Ответ 6
Как сказал Микола, append()
возвращает пустоту, поэтому каждую итерацию вы устанавливаете list1 в nonetype, потому что append возвращает nonetype. На следующей итерации list1 имеет значение null, поэтому вы пытаетесь вызвать метод append null. У Nulls нет методов, следовательно, ваша ошибка.
Ответ 7
Обратите внимание, что вы также можете использовать вставку, чтобы поместить номер в нужную позицию в списке:
initList = [1,2,3,4,5]
initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5]
А также обратите внимание, что в python вы всегда можете получить длину списка, используя метод len()
Ответ 8
используйте my_list.append(...)
и не использовать, а другой список для добавления в список можно изменить.