Python 如何使用列表理解连接3个列表?
在python中,如何使用列表理解连接3个列表 拥有: 想要: 我试着使用列表理解,但我还不是很擅长。以下是我尝试过的:Python 如何使用列表理解连接3个列表?,python,list,list-comprehension,Python,List,List Comprehension,在python中,如何使用列表理解连接3个列表 拥有: 想要: 我试着使用列表理解,但我还不是很擅长。以下是我尝试过的: allList = [n for n in list1 for n in list2 for n in list3 ] 这显然是一个坏主意,并产生了len(列表1)*len(列表2)*len(列表3)值。哎呀。所以我试了一下: allList = [n for n in list1, list2, list3] 但这给了我allList=[list1,li
allList = [n for n in list1 for n in list2 for n in list3 ]
这显然是一个坏主意,并产生了len(列表1)*len(列表2)*len(列表3)值。哎呀。所以我试了一下:
allList = [n for n in list1, list2, list3]
但这给了我allList=[list1,list2,list3](3个列表)
我知道您可以使用+运算符连接(如x=list1+list2+list3),但是如何使用简单的列表理解来连接呢
这里有一个类似的问题:,但这是C#。你可以做
allList=list1+list2+list3
而不是allList=[x代表list1+list2+list3]
更好的解决方案是使用而不是添加。这样,您就不用创建中间列表list1+list2
,然后再创建另一个中间列表list1+list2+list3
,只需创建没有中间对象的最终列表:
allList = [x for x in itertools.chain(list1, list2, list3)]
然而,像这样的空列表理解是相当愚蠢的;只需使用list
函数将任意iterable转换为列表:
allList = list(itertools.chain(list1, list2, list3))
或者,更好的是…如果您需要它的唯一原因是在其上循环,只需将其作为迭代器:
for thing in itertools.chain(list1, list2, list3):
do_stuff(thing)
当我们讨论这个问题时,这个问题实际上是一个非常不同的、更复杂的问题。但是,由于
itertools
非常酷,它在Python中仍然是一个单行程序:
itertools.product(list1, list2, list3)
或者,如果您想以该问题指定的格式打印出来:
print('\n'.join(map(' '.join, itertools.product(list1, list2, list3))))
以下是一些选项:
>>> 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]
理解:(这真的没有必要)
我看不出这样做有什么好处:你可以解释一下你认为使用列表理解有什么好处?我想你一定对他们的工作有一些误解。对于
列表(某物)
,可能重复+1;令人惊讶的是,它没有被更多地使用。感谢sum([list1,list2,list3])
。我想避免只在代码中的一行使用itertools。并不是说避免是一个优先事项。这对我有帮助。有什么要注意的吗?itertools更快吗?非常棒[x代表x的总和([list1,list2,list3])]
print('\n'.join(map(' '.join, itertools.product(list1, list2, list3))))
>>> 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]
>>> [x for x in sum([list1, list2, list3], [])]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]