The*_*iat 6 python list-comprehension list
在python中,如何使用列表推导来连接3个列表?
有:
list1 = [1,2,3,4]
list2 = [5,6,7,8]
list3 = [9,10,11,12]
Run Code Online (Sandbox Code Playgroud)
想:
allList = [1,2,3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)
我尝试使用列表理解,但我还不是很擅长.这些是我尝试过的:
allList = [n for n in list1 for n in list2 for n in list3 ]
Run Code Online (Sandbox Code Playgroud)
这是一个坏主意,显然并且产生了值(len1)*len(list2)*len(list3)值.哎呀.所以我尝试了这个:
allList = [n for n in list1, list2, list3]
Run Code Online (Sandbox Code Playgroud)
但这给了我allList = [list1,list 2,list3](3个列表清单)
我知道你可以使用+运算符连接(如x = list1 + list2 + list3),但是你如何使用简单的列表理解呢?
这里有一个类似的问题:连接3个单词列表,但那是C#.
aba*_*ert 13
更好的解决方案是使用itertools.chain
而不是添加.这样,您只需创建没有中间名的最终列表,而不是创建中间列表list1 + list2
,然后list1 + list2 + list3
创建另一个中间列表:
allList = [x for x in itertools.chain(list1, list2, list3)]
Run Code Online (Sandbox Code Playgroud)
但是,像这样的空列表理解非常愚蠢; 只需使用该list
函数将任意迭代变为列表:
allList = list(itertools.chain(list1, list2, list3))
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好......如果您需要这个的唯一原因是循环它,只需将其保留为迭代器:
for thing in itertools.chain(list1, list2, list3):
do_stuff(thing)
Run Code Online (Sandbox Code Playgroud)
虽然我们在谈论它,但你所链接的"类似问题"实际上是一个非常不同,更复杂的问题.但是,因为itertools
它太酷了,它仍然是Python中的一个单行程序:
itertools.product(list1, list2, list3)
Run Code Online (Sandbox Code Playgroud)
或者,如果您想以该问题指定的格式打印出来:
print('\n'.join(map(' '.join, itertools.product(list1, list2, list3))))
Run Code Online (Sandbox Code Playgroud)
以下是一些选项:
>>> sum([list1, list2, list3], [])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> list1 + list2 + list3
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Run Code Online (Sandbox Code Playgroud)
具有理解力:(实际上没有必要)
>>> [x for x in sum([list1, list2, list3], [])]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6973 次 |
最近记录: |