Possible to append multiple lists at once? (Python)

Question:

I have a bunch of lists I want to append to a single list that is sort of the “main” list in a program I’m trying to write. Is there a way to do this in one line of code rather than like 10? I’m a beginner so I have no idea…

For a better picture of my question, what if I had these lists:

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

And want to append y and z to x. Instead of doing:

x.append(y)
x.append(z)

Is there a way to do this in one line of code? I already tried:

x.append(y, z)

And it wont work.

Asked By: anon

||

Answers:

x.extend(y+z)

should do what you want

or

x += y+z

or even

x = x+y+z
Answered By: Joran Beasley

Extending my comment

In [1]: x = [1, 2, 3]
In [2]: y = [4, 5, 6]
In [3]: z = [7, 8, 9]
In [4]: from itertools import chain
In [5]: print list(chain(x,y,z))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Answered By: night-crawler

equivalent to above answer, but sufficiently different to be worth a mention:

my_map = {
   'foo': ['a', 1, 2],
   'bar': ['b', '2', 'c'],
   'baz': ['d', 'e', 'f'],
} 
list(itertools.chain(*my_map.values()))
['d', 'e', 'f', 'a', 1, 2, 'b', '2', 'c']

in the above expression, * is important for groking result as args to chain, this is same as prior chain(x,y,z). Also, note the result is hash-ordered.

Answered By: msudder

You can use sum function with start value (empty list) indicated:

a = sum([x, y, z], [])

This is especially more suitable if you want to append an arbitrary number of lists.

Answered By: Minjoon Seo

If you prefer a slightly more functional approach, you could try:

import functools as f

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

x = f.reduce(lambda x, y: x+y, [y, z], x)

This will enable you to concatenate any number of lists onto list x.

If you would just like to concatenate any number of lists together (i.e. not onto some base list), you can simplify to:

import functools as f
from operator import add
big_list = f.reduce(add, list_of_lists)

Take note that our BFDL has his reservations with regard to lambdas, reduce, and friends: https://www.artima.com/weblogs/viewpost.jsp?thread=98196

To complete this answer, you can read more about reduce in the documentation: https://docs.python.org/3/library/functools.html#functools.reduce

I quote: "Apply function of two arguments cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value."

P.S. https://stackoverflow.com/a/33277438/532513 compares the performance of different approaches for list concatenation.

Answered By: Charl Botha

In one line , it can be done in following ways

x.extend(y+z)

or

x=x+y+z
Answered By: wingman__7

To exactly replicate the effect of append, try the following function, simple and effective:

a=[]
def concats (lists):
    for i in lists:
        a==a.append(i)


concats ([x,y,z])
print(a)
Answered By: jillm_5
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.