3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
以下僅使用兩個(gè)嵌套的 for 循環(huán)
from itertools import product as prod
def 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 sequences
result = [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']]

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用模塊itertoolsanscombinations
import itertools as it
l1 = []
# get all combinations of num
for i in range(1, len(num)+1):
l1.extend([* it.combinations(num, i)])
# get all combinations of alpha
for j in range(1, len(alpha)+1):
l2.extend([* it.combinations(alpha, j)])
# list comprehension to combine elements from the two lists
comb = [e1+e2 for e1 in l1 for e2 in l2]
通過這樣做,您將獲得一個(gè)元組列表。
更新:
為了考慮約束:
輸出期望所有可能的連續(xù)組合
例如 [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']

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
我希望它會(huì)有所幫助
from itertools import combinations
num = [1, 2, 3]
alpha = ["a", "b", "c"]
big_list=num+alpha
comb += 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秒內(nèi)完成]
添加回答
舉報(bào)