Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用列表理解连接3个列表?_Python_List_List Comprehension - Fatal编程技术网

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

在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,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]