List append() in for loop

jim basquiat picture jim basquiat · Jan 3, 2017 · Viewed 261.1k times · Source

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'

Answer

Rafael Aguilar picture Rafael Aguilar · Jan 3, 2017

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 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']