How to append to the end of an empty list?
PythonPython Problem Overview
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?
Python Solutions
Solution 1 - Python
append
actually changes the list. Also, it takes an item, not a list. Hence, all you need is
for i in range(n):
list1.append(i)
(By the way, note that you can use range(n)
, in this case.)
I assume your actual use is more complicated, but you may be able to use a list comprehension, which is more pythonic for this:
list1 = [i for i in range(n)]
Or, in this case, in Python 2.x range(n)
in fact creates the list that you want already, although in Python 3.x, you need list(range(n))
.
Solution 2 - Python
You don't need the assignment operator. append returns None.
Solution 3 - Python
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])
Solution 4 - Python
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.
Solution 5 - 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.
Solution 6 - Python
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()
Solution 7 - Python
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.
Solution 8 - Python
use my_list.append(...) and do not use and other list to append as list are mutable.