List append() in for loop

PythonFor LoopAppend

Python Problem Overview


In Python, trying to do the most basic append function to a list with a loop: Not sure what i am missing here:

a=[]
for i in range(5):    
    a=a.append(i)
a

returns: 'NoneType' object has no attribute 'append'

Python Solutions


Solution 1 - Python

The list.append function does not return any value(but None), it just adds the value to the list you are using to call that method.

In the first loop round you will assign None (because the no-return of append) to a, then in the second round it will try to call a.append, as a is None it will raise the Exception you are seeing

You just need to change it to:

a=[]
for i in range(5):    
    a.append(i)
print(a)
# [0, 1, 2, 3, 4]

list.append is what is called a mutating or destructive method, i.e. it will destroy or mutate the previous object into a new one(or a new state).

If you would like to create a new list based in one list without destroying or mutating it you can do something like this:

a=['a', 'b', 'c']
result = a + ['d']

print result
# ['a', 'b', 'c', 'd']

print a
# ['a', 'b', 'c']

As a corollary only, you can mimic the append method by doing the following:

a=['a', 'b', 'c']
a = a + ['d']

print a
# ['a', 'b', 'c', 'd']

Solution 2 - Python

You don't need the assignment, list.append(x) will always append x to a and therefore there's no need te redefine a.

a = []
for i in range(5):    
    a.append(i)
print(a)

is all you need. This works because lists are mutable.

Also see the docs on data structures.

Solution 3 - Python

No need to re-assign.

a=[]
for i in range(5):    
    a.append(i)
a

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
Questionjim jarnacView Question on Stackoverflow
Solution 1 - PythonRafael AguilarView Answer on Stackoverflow
Solution 2 - PythonlinusgView Answer on Stackoverflow
Solution 3 - PythonMuntaser AhmedView Answer on Stackoverflow