Possible to append multiple lists at once? (Python

2020-02-24 11:10发布

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.

7条回答
小情绪 Triste *
2楼-- · 2020-02-24 11:50

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. Using sum() as described in https://stackoverflow.com/a/41752487/532513 is super compact, it does seem to work with lists, and is really fast (see https://stackoverflow.com/a/33277438/532513 ) but help(sum) in Python 3.6 has the following to say:

This function is intended specifically for use with numeric values and may reject non-numeric types.

Although this is slightly worrying, I will probably keep it as my first option for concatenating lists.

查看更多
我命由我不由天
3楼-- · 2020-02-24 11:50

In one line , it can be done in following ways

x.extend(y+z)

or

x=x+y+z
查看更多
男人必须洒脱
4楼-- · 2020-02-24 11:52

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)
查看更多
淡お忘
5楼-- · 2020-02-24 11:54

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]
查看更多
家丑人穷心不美
6楼-- · 2020-02-24 11:58

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.

查看更多
何必那么认真
7楼-- · 2020-02-24 12:02
x.extend(y+z)

should do what you want

or

x += y+z

or even

x = x+y+z
查看更多
登录 后发表回答