簡體   English   中英

生成和合並多個列表的所有組合python

[英]Generating and merging all combinations of multiple lists python

之前曾有人問過類似的問題,但沒有一個完全像它,我有點迷失了。

如果我有2套清單(或清單清單)

listOLists = [[1,2,3],[1,3,2]]
listOLists2 = [[4,5,6],[4,6,5]]

我想“合並”這兩個列表

mergedLists = [[1,2,3,4,5,6],[1,3,2,4,5,6],[1,2,3,4,6,5],[1,3,2,4,6,5]]

我該怎么做?

您可以使用生成器來簡化代碼,如下所示:

a = [[1, 2, 3], [1, 3, 2], [2, 1, 3]]
b = [[4, 5, 6], [4, 6, 5], [5, 4, 6]]
c = [i + j for i in a for j in b]
print c

輸出:

[[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 6, 5], [1, 2, 3, 5, 4, 6], [1, 3, 2, 4, 5, 6], [1, 3, 2, 4, 6, 5], [1, 3, 2, 5, 4, 6], [2, 1, 3, 4, 5, 6], [2, 1, 3, 4, 6, 5], [2, 1, 3, 5, 4, 6]]
list1s=[[1,2,3],[3,2,1],[2,2,2]]
list2s=[[3,3,3],[4,4,4],[5,5,5]]


for indis1 in list1s:
    for indis2 in list2s:
        print(indis1 + indis2)

嘗試和

[1, 2, 3, 3, 3, 3]
[1, 2, 3, 4, 4, 4]
[1, 2, 3, 5, 5, 5]
[3, 2, 1, 3, 3, 3]
[3, 2, 1, 4, 4, 4]
[3, 2, 1, 5, 5, 5]
[2, 2, 2, 3, 3, 3]
[2, 2, 2, 4, 4, 4]
[2, 2, 2, 5, 5, 5]
list1 = [[1,2,3],[1,3,2]]
list2 = [[4,5,6],[4,6,5]]

mergedLists = []

for list1_inner in list1:
  for list2_inner in list2:
    mergedLists.append(list1_inner + list2_inner)

print(mergedLists) 

方法比較:

import itertools
import random
l1 = [[random.randint(1,100) for _ in range(100)]for _ in range(100)]
l2 = [[random.randint(1,100) for _ in range(100)]for _ in range(100)]

使用itertools

def itert(l1, l2):
    [list(itertools.chain(*x)) for x in itertools.product(l1, l2)]

使用for循環:

def forloops(list1, list2):
    mergedLists = []
    for list1_inner in list1:
      for list2_inner in list2:
        mergedLists.append(list1_inner + list2_inner)

簡單的理解:

def comp(l1, l2):
    [i + j for i in l1 for j in l2]

速度

%time itert(l1, l2)
Wall time: 99.8 ms

%time comp(l1, l2)
Wall time: 31.3 ms

%time forloops(l1, l2)
Wall time: 46.9 ms

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM