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