How to append to the end of an empty list?

Python

Python 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLostLinView Question on Stackoverflow
Solution 1 - PythonAndrew JaffeView Answer on Stackoverflow
Solution 2 - PythonMikolaView Answer on Stackoverflow
Solution 3 - PythonYuri StukenView Answer on Stackoverflow
Solution 4 - PythonEndophageView Answer on Stackoverflow
Solution 5 - PythonPetar IvanovView Answer on Stackoverflow
Solution 6 - PythonArtsiom RudzenkaView Answer on Stackoverflow
Solution 7 - PythonJohnView Answer on Stackoverflow
Solution 8 - PythonRanjitView Answer on Stackoverflow