我有一堆列表我要附加到一个单独的列表是那种在一个程序中,我试着写了“主”列表中。 有没有办法在一行代码,而不是像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)
而且它不会工作。
扩展我的评论
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']
在上述表达式中,*是用于groking结果作为参数传递给链重要,这是相同的作为现有链(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有他的保留意见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有以下说:
该功能用于与数字值使用专门用于,并且可以拒绝非数字类型。
虽然这是令人担忧的略,我可能会保持它作为串联列表我的第一选择。
精确重现追加的效果,请尝试以下功能,简单而有效:
a=[]
def concats (lists):
for i in lists:
a==a.append(i)
concats ([x,y,z])
print(a)