是否可以一次附加多个列表?(Python)

是否可以一次附加多个列表?(Python),python,list,append,Python,List,Append,我有一组列表,我想附加到一个列表中,这是我试图编写的程序中的“主”列表。有没有一种方法可以在一行代码中而不是在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) 而且它不起作用 x.extend(

我有一组列表,我想附加到一个列表中,这是我试图编写的程序中的“主”列表。有没有一种方法可以在一行代码中而不是在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)
而且它不起作用

x.extend(y+z)
你应该做你想做的事

甚至

x = x+y+z
扩展我的评论

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]

与上述答案相同,但差异很大,值得一提:

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

在上面的表达式中,*对于搜索结果很重要,因为args到chain,这与前面的chain(x,y,z)相同。另外,请注意,结果是按哈希顺序排列的。

您可以使用指示起始值(空列表)的
sum
函数:

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

如果您想要附加任意数量的列表,这尤其合适。

如果您更喜欢功能性更强的方法,您可以尝试:

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对lambdas、reduce和friends有保留意见:

要完成此回答,您可以在文档中阅读有关reduce的更多信息:

我引述:“将两个参数的函数累积应用于序列项,从左到右,以便将序列减少为单个值。”

另外,如中所述,使用
sum()
非常紧凑,似乎可以处理列表,而且速度非常快(请参阅),但Python 3.6中的
help(sum)
有如下说明:

此函数专门用于数值,可能会拒绝非数值类型


虽然这有点令人担忧,但我可能会将其作为连接列表的第一个选项。

在一行中,可以通过以下方式完成

x.extend(y+z)


要准确复制append的效果,请尝试以下简单有效的函数:

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


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

您真的想要
.append
,还是
.extend
?你了解其中的区别吗?你希望得到什么样的输出?不,我从未见过。扩展之前,它有什么作用?你对itertools有什么看法
.append
将向列表中添加一个元素
.extend
会将一个列表连接到一个列表中。请注意,最后一个列表有细微的不同-您正在创建一个新列表并将其分配给
x
,而不是就地更改
x
。我尝试了.extend,它工作得非常好。谢谢你的帮助。extend方法一直为我返回None。
extend
append
方法返回
None
,它们修改了列表。我发现itertools选项的简单形式很有用:
itertools.chain([1,2,3],[4,5,6],[7,8,9])
=
[1,2,3,4,5,6,7,8,9]
x=x+y+z
a=[]
def concats (lists):
    for i in lists:
        a==a.append(i)


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