可以一次添加多个列表? (蟒蛇)(Possible to append multiple lis

2019-07-17 18:30发布

我有一堆列表我要附加到一个单独的列表是那种在一个程序中,我试着写了“主”列表中。 有没有办法在一行代码,而不是像10这样做呢? 我是一个初学者,所以我不知道...

对于我的问题,如果我有什么这些列表的更好的画面:

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

而想要追加y和z为x。 而不是做的:

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

有没有办法在一行代码来做到这一点? 我已经尝试过:

x.append(y, z)

而且它不会工作。

Answer 1:

x.extend(y+z)

应该做你想要什么

要么

x += y+z

甚至

x = x+y+z


Answer 2:

扩展我的评论

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]


Answer 3:

您可以使用sum功能与初始值(空单)表示:

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

如果要追加列出任意数量的,这一点尤其更适合。



Answer 4:

等效于上面的答案,但足够不同的是不值一提:

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

在上述表达式中,*是用于groking结果作为参数传递给链重要,这是相同的作为现有链(X,Y,Z)。 此外,请注意其结果是哈希有序。



Answer 5:

如果你喜欢一个稍微更实用的方法,你可以尝试:

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)

这将使你来连接任意数量的名单列表上x

如果你只是想一起串联任意数量的名单(即不是到一些基本的列表),可以简化为:

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

请记住我们的BFDL有他的保留意见lambda表达式,减少和朋友们: https://www.artima.com/weblogs/viewpost.jsp?thread=98196

要完成这个答案,你可以阅读更多关于减少文件中: https://docs.python.org/3/library/functools.html#functools.reduce

我引述如下:“应用的两个参数函数累计到序列的项目,由左到右,这样的顺序,以减少单个值。”

PS使用sum()中描述https://stackoverflow.com/a/41752487/532513是超紧凑,它似乎与名单的工作,而且是非常快(见https://stackoverflow.com/a/33277438 / 532513 ),但help(sum)在Python 3.6有以下说:

该功能用于与数字值使用专门用于,并且可以拒绝非数字类型。

虽然这是令人担忧的略,我可能会保持它作为串联列表我的第一选择。



Answer 6:

精确重现追加的效果,请尝试以下功能,简单而有效:

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


concats ([x,y,z])
print(a)


Answer 7:

在一条线,它可以在下面的方式进行

x.extend(y+z)

要么

x=x+y+z


文章来源: Possible to append multiple lists at once? (Python)