如何使用列表理解连接3个列表?

2024-03-29 02:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,如何使用列表理解连接3个列表?

拥有:

    list1 = [1,2,3,4]
    list2 = [5,6,7,8]
    list3 = [9,10,11,12]

想要:

    allList = [1,2,3,4,5,6,7,8,9,10,11,12]

我试着用列表理解,但我还不太擅长。我试过的是:

    allList = [n for n in list1 for n in list2 for n in list3 ]

这显然是个坏主意,并产生了len(list1)*len(list2)*len(list3)值。哎呀。所以我试了一下:

    allList = [n for n in list1, list2, list3]

但这给了我allList=[list1,list 2,list3](3个列表)

我知道您可以使用+运算符连接(如x=list1+list2+list3中所示),但是如何使用简单的列表理解来实现这一点呢?

这里有一个类似的问题:Concatenate 3 lists of words,但这是针对C。


Tags: ofin列表forlen运算符listslist
3条回答

以下是一些选项:

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

你可以做allList = list1 + list2 + list3而不是allList = [x for x in 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)

当我们在做的时候,"similar question" you linked to实际上是一个非常不同的、更复杂的问题。但是,因为itertools很酷,所以在Python中它仍然是一行代码:

itertools.product(list1, list2, list3)

或者,如果要按问题指定的格式打印出来:

print('\n'.join(map(' '.join, itertools.product(list1, list2, list3))))

相关问题 更多 >