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

在 Python 中使用不同长度的输出列表查找不同列表的所有可能组合

在 Python 中使用不同长度的输出列表查找不同列表的所有可能组合

MM们 2021-08-05 16:29:12
我一直试图在不同的列表中找到元素的所有组合。我尝试使用 itertools.product() 但我得到了固定长度的输出列表 import itertools a=[2,4,6,8,10] b=[3,6,9] c=[5,10] d=[10] l=list(itertools.product(a,b,c,d)) print(l) [(2, 3, 5, 10), (2, 3, 10, 10), (2, 6, 5, 10), (2, 6, 10, 10), (2, 9, 5, 10), (2, 9, 10, 10), (4, 3, 5, 10), (4, 3, 10, 10), (4, 6, 5, 10), (4, 6, 10, 10), (4, 9, 5, 10), (4, 9, 10, 10), (6, 3, 5, 10), (6, 3, 10, 10), (6, 6, 5, 10), (6, 6, 10, 10), (6, 9, 5, 10), (6, 9, 10, 10), (8, 3, 5, 10), (8, 3, 10, 10), (8, 6, 5, 10), (8, 6, 10, 10), (8, 9, 5, 10), (8, 9, 10, 10), (10, 3, 5, 10), (10, 3, 10, 10), (10, 6, 5, 10), (10, 6, 10, 10), (10, 9, 5, 10), (10, 9, 10, 10)]但我需要的是输出具有不同长度和组合的列表,例如      Expected output : [2,3,5,10],                        [2,3,5],                        [2,3,10],                        [2,3,10,10],                         [2,3],                        [2,6,5,10],                        [2,6,10,10],                        [2,6,5],                        [2,6],                        [2,9,5,10],                        [2,9,5],                        [2,9],                        [2,9,10,10],                        [4,3,5,10],                        [4,3,5],                        [4,3,10,10],                        .                        .                             [10,9,10,10]                        ...so on 我尝试通过组合所有列表来使用组合,但它没有提供所需的输出a=[2,4,6,8,10,3,6,9,5,10]import itertoolsfor i in range(1,4):     b=list(itertools.combinations(a,i))     print(b)鉴于您不知道将获得多少个列表作为输入那么实现预期输出的有效方法是什么?
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您的目标是从每个列表中选择一个元素或不选择一个元素,对吗?因此,将None(或任何其他未出现的值)附加到每个列表,运行itertools.product()并None从每个结果中剥离。完毕。


>>> raw = itertools.product(a+[None], b+[None], c+[None])

>>> clean = [ [ e for e in result if e is not None ] for result in raw ]

>>> clean[:10]

[[2, 3, 10], [2, 3], [2, 6, 5], [2, 6, 10], [2, 6], [2, 9, 5], [2, 9, 10], [2, 9], 

[2, 5], [2, 10]]


查看完整回答
反对 回复 2021-08-05
  • 1 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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