繁体   English   中英

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

[英]Possible to append multiple lists at once? (Python)

我有一堆列表,我想附加到一个列表中,该列表是我正在尝试编写的程序中的“主”列表。 有没有办法在一行代码而不是像 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 += y+z

甚至

x = x+y+z

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

a = sum([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]

想要完全复制append的效果,试试下面这个功能,简单有效:

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


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

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

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 和朋友有所保留: https ://www.artima.com/weblogs/viewpost.jsp?thread=98196

要完成此答案,您可以在文档中阅读有关 reduce 的更多信息: https ://docs.python.org/3/library/functools.html#functools.reduce

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

PS https://stackoverflow.com/a/33277438/532513比较了列表连接的不同方法的性能。

相当于上面的答案,但有足够的不同值得一提:

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 到链很重要,这与先前的链(x,y,z)相同。 另外,请注意结果是哈希排序的。

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

x.extend(y+z)

或者

x=x+y+z

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM