为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得 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 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号