I have a list:
list1=[]
the length of the list is undetermined so I am trying to append objects to the end of list1 like such:
for i in range(0, n):
list1=list1.append([i])
But my output keeps giving this error: AttributeError: 'NoneType' object has no attribute 'append'
Is this because list1 starts off as an empty list? How do I fix this error?
This question is related to
python
I personally prefer the +
operator than append
:
for i in range(0, n):
list1 += [[i]]
But this is creating a new list every time, so might not be the best if performance is critical.
Like Mikola said, append()
returns a void, so every iteration you're setting list1 to a nonetype because append is returning a nonetype. On the next iteration, list1 is null so you're trying to call the append method of a null. Nulls don't have methods, hence your error.
Note that you also can use insert in order to put number into the required position within list:
initList = [1,2,3,4,5]
initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5]
And also note that in python you can always get a list length using method len()
append
returns None, so at the second iteration you are calling method append
of NoneType. Just remove the assignment:
for i in range(0, n):
list1.append([i])
You don't need the assignment operator. append returns None.
Mikola has the right answer but a little more explanation. It will run the first time, but because append returns None
, after the first iteration of the for loop, your assignment will cause list1
to equal None
and therefore the error is thrown on the second iteration.
use my_list.append(...) and do not use and other list to append as list are mutable.
Source: Stackoverflow.com