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'
💡 Tips: When you use . append() the original list is modified. The method does not create a copy of the list – it mutates the original list in memory.
You can append a list in for loop, Use the list append() method to append elements to a list while iterating over the given list.
A Python list can also contain duplicates, and it can also contain multiple elements of different data types. This way, you can store integers, floating point numbers, positive or negatives, strings, and even boolean values in a list.
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']
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 list
s are mutable.
Also see the docs on data structures.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With