亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲得 2 個列表的所有組合?

如何獲得 2 個列表的所有組合?

皈依舞 2023-03-01 15:41:37
我如何在 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 combinationse.g. ['a'] ['a','b'] are desired while ['a','c'] is not.我嘗試了 4 個 for 循環/4 個 while 循環的嵌套。使用這種深度的循環是否常見?
查看完整描述

3 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

以下僅使用兩個嵌套的 for 循環


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



查看完整回答
反對 回復 2023-03-01
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

您可以使用模塊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]       

通過這樣做,您將獲得一個元組列表。


更新:

為了考慮約束:


輸出期望所有可能的連續組合


例如 [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']


查看完整回答
反對 回復 2023-03-01
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

我希望它會有所幫助


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秒內完成]


查看完整回答
反對 回復 2023-03-01
  • 3 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號