如何获得 2 个列表的所有组合?

我如何在 Python 中执行此操作?


输入:


num = [1, 2, 3]

alpha = ['a', 'b', 'c']

输出:


[1, a] [1, a, b] [1, a, b, c] [1, b, c] [1, c]

[1, 2, a] [1, 2, a, b] ... [1, 2, c]

...

...

[3, a] [3, a, b] ... [3, c]

约束:


The output expect all possible consecutive combinations

e.g. ['a'] ['a','b'] are desired while ['a','c'] is not.

我尝试了 4 个 for 循环/4 个 while 循环的嵌套。使用这种深度的循环是否常见?


皈依舞
浏览 179回答 3
3回答

千万里不及你

以下仅使用两个嵌套的 for 循环from itertools import product as proddef consecutive_combos(a):    " Generates consecutive ombinations of items in list "    return [a[i:j] for i in range(len(a)) for j in range(i+1, len(a)+1)]num = [1, 2, 3]alpha = ['a', 'b', 'c']# Generates product of sequencesresult = [x + y for x, y in prod(consecutive_combos(num), consecutive_combos(alpha))]print(result)输出[[1, 'a'], [1, 'a', 'b'], [1, 'a', 'b', 'c'], [1, 'b'], [1, 'b', 'c'], [1, 'c'], [1, 2, 'a'], [1, 2, 'a', 'b'], [1, 2, 'a', 'b', 'c'], [1, 2, 'b'], [1, 2, 'b', 'c'], [1, 2, 'c'], [1, 2, 3, 'a'], [1, 2, 3, 'a', 'b'], [1, 2, 3, 'a', 'b', 'c'], [1, 2, 3, 'b'], [1, 2, 3, 'b', 'c'], [1, 2, 3, 'c'], [2, 'a'], [2, 'a', 'b'], [2, 'a', 'b', 'c'], [2, 'b'], [2, 'b', 'c'], [2, 'c'], [2, 3, 'a'], [2, 3, 'a', 'b'], [2, 3, 'a', 'b', 'c'], [2, 3, 'b'], [2, 3, 'b', 'c'], [2, 3, 'c'], [3, 'a'], [3, 'a', 'b'], [3, 'a', 'b', 'c'], [3, 'b'], [3, 'b', 'c'], [3, 'c']]

翻阅古今

您可以使用模块itertoolsanscombinationsimport itertools as itl1 = []# get all combinations of numfor i in range(1, len(num)+1):    l1.extend([* it.combinations(num, i)])# get all combinations of alphafor j in range(1, len(alpha)+1):    l2.extend([* it.combinations(alpha, j)])# list comprehension to combine elements from the two listscomb = [e1+e2 for e1 in l1 for e2 in l2]       通过这样做,您将获得一个元组列表。更新:为了考虑约束:输出期望所有可能的连续组合例如 [a] [a,b] 是需要的,而 [a,c] 不是。num = [1, 2, 3]alpha = ['a', 'b', 'c']l1 = [num[i:j+1] for i in range(len(num)) for j in range(i, len(num))]l2 = [alpha[i:j+1] for i in range(len(alpha)) for j in range(i, len(alpha))]result = [e1+e2 for e1 in l1 for e2 in l2]print(*result, sep="\n")[1, 'a'][1, 'a', 'b'][1, 'a', 'b', 'c'][1, 'b'][1, 'b', 'c'][1, 'c'][1, 2, 'a'][1, 2, 'a', 'b'][1, 2, 'a', 'b', 'c'][1, 2, 'b'][1, 2, 'b', 'c'][1, 2, 'c'][1, 2, 3, 'a'][1, 2, 3, 'a', 'b'][1, 2, 3, 'a', 'b', 'c'][1, 2, 3, 'b'][1, 2, 3, 'b', 'c'][1, 2, 3, 'c'][2, 'a'][2, 'a', 'b'][2, 'a', 'b', 'c'][2, 'b'][2, 'b', 'c'][2, 'c'][2, 3, 'a'][2, 3, 'a', 'b'][2, 3, 'a', 'b', 'c'][2, 3, 'b'][2, 3, 'b', 'c'][2, 3, 'c'][3, 'a'][3, 'a', 'b'][3, 'a', 'b', 'c'][3, 'b'][3, 'b', 'c'][3, 'c']

largeQ

我希望它会有所帮助from itertools import combinations num = [1, 2, 3]alpha = ["a", "b", "c"]big_list=num+alphacomb += list(combinations(big_list,2) )comb += list(combinations(big_list,3) )for i in list(comb):    print (i)输出:(1, 2) (1, 3) (1, 'a') (1, 'b') (1, 'c') (2, 3) (2, 'a') (2, 'b') (2, 'c') (3, 'a') (3, 'b') (3, 'c') ('a', 'b') ('a', 'c') ('b' , 'c') (1, 2, 3) (1, 2, 'a') (1, 2, 'b') (1, 2, 'c') (1, 3, 'a') (1 , 3, 'b') (1, 3, 'c') (1, 'a', 'b') (1, 'a', 'c') (1, 'b', 'c') ( 2, 3, 'a') (2, 3, 'b') (2, 3, 'c') (2, 'a', 'b') (2, 'a', 'c') (2 , 'b', 'c') (3, 'a', 'b') (3, 'a', 'c') (3, 'b', 'c') ('a', 'b' , 'c') [0.50秒内完成]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python