How to append multiple values to a list in Python
Question:
I am trying to figure out how to append multiple values to a list in Python. I know there are few methods to do so, such as manually input the values, or put the append operation in a for
loop, or the append
and extend
functions.
However, I wonder if there is neater way to do so? Maybe a certain package or function?
Answers:
Other than the append
function, if by “multiple values” you mean another list, you can simply concatenate them like so.
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
[1, 2, 3, 4, 5, 6]
If you take a look at the official docs, you’ll see right below append
, extend
. That’s what your looking for.
There’s also itertools.chain
if you are more interested in efficient iteration than ending up with a fully populated data structure.
You can use the sequence method list.extend
to extend the list by multiple values from any kind of iterable, being it another list or any other thing that provides a sequence of values.
>>> lst = [1, 2]
>>> lst.append(3)
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
>>> lst.extend([5, 6, 7])
>>> lst.extend((8, 9, 10))
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lst.extend(range(11, 14))
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
So you can use list.append()
to append a single value, and list.extend()
to append multiple values.
if the number of items was saved in a variable say n. you can use list comprehension and plus sign for list expansion.
lst = ['A', 'B']
n = 1
new_lst = lst + ['flag'+str(x) for x in range(n)]
print(my_lst)
>>> ['A','B','flag0','flag1']
One way you can work around this type of problem is –
Here we are inserting a list to the existing list by creating a variable new_values.
Note that we are inserting the values in the second index, i.e. a[2]
a = [1, 2, 7, 8]
new_values = [3, 4, 5, 6]
a.insert(2, new_values)
print(a)
But here insert() method will append the values as a list.
So here goes another way of doing the same thing, but this time, we’ll actually insert the values in between the items.
a = [1, 2, 7, 8]
a[2:2] = [3,4,5,6]
print(a)
Another solution is to unpack both lists inside a new list and assign it back to the copy of the original list:
my_list[:] = [*my_list, *new_items]
An example:
my_list = [1, 2]
new_items = [3, 4, 5]
my_list[:] = [*my_list, *new_items]
my_list # [1, 2, 3, 4, 5]
or assign to an empty slice as in Saumya Prasad’s answer (but at the end of the list):
length = len(my_list)
my_list[length:length] = new_items
my_list # [1, 2, 3, 4, 5]
It’s worth noting that list.extend
and slice assignment to an empty slice both modify the list in-place whereas itertools.chain
or unpacking or +
operator create a new list.
I am trying to figure out how to append multiple values to a list in Python. I know there are few methods to do so, such as manually input the values, or put the append operation in a for
loop, or the append
and extend
functions.
However, I wonder if there is neater way to do so? Maybe a certain package or function?
Other than the append
function, if by “multiple values” you mean another list, you can simply concatenate them like so.
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
[1, 2, 3, 4, 5, 6]
If you take a look at the official docs, you’ll see right below append
, extend
. That’s what your looking for.
There’s also itertools.chain
if you are more interested in efficient iteration than ending up with a fully populated data structure.
You can use the sequence method list.extend
to extend the list by multiple values from any kind of iterable, being it another list or any other thing that provides a sequence of values.
>>> lst = [1, 2]
>>> lst.append(3)
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
>>> lst.extend([5, 6, 7])
>>> lst.extend((8, 9, 10))
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lst.extend(range(11, 14))
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
So you can use list.append()
to append a single value, and list.extend()
to append multiple values.
if the number of items was saved in a variable say n. you can use list comprehension and plus sign for list expansion.
lst = ['A', 'B']
n = 1
new_lst = lst + ['flag'+str(x) for x in range(n)]
print(my_lst)
>>> ['A','B','flag0','flag1']
One way you can work around this type of problem is –
Here we are inserting a list to the existing list by creating a variable new_values.
Note that we are inserting the values in the second index, i.e. a[2]
a = [1, 2, 7, 8]
new_values = [3, 4, 5, 6]
a.insert(2, new_values)
print(a)
But here insert() method will append the values as a list.
So here goes another way of doing the same thing, but this time, we’ll actually insert the values in between the items.
a = [1, 2, 7, 8]
a[2:2] = [3,4,5,6]
print(a)
Another solution is to unpack both lists inside a new list and assign it back to the copy of the original list:
my_list[:] = [*my_list, *new_items]
An example:
my_list = [1, 2]
new_items = [3, 4, 5]
my_list[:] = [*my_list, *new_items]
my_list # [1, 2, 3, 4, 5]
or assign to an empty slice as in Saumya Prasad’s answer (but at the end of the list):
length = len(my_list)
my_list[length:length] = new_items
my_list # [1, 2, 3, 4, 5]
It’s worth noting that list.extend
and slice assignment to an empty slice both modify the list in-place whereas itertools.chain
or unpacking or +
operator create a new list.