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

你如何在python中返回2个列表的所有可能组合?

你如何在python中返回2个列表的所有可能组合?

牛魔王的故事 2021-11-09 15:20:16
我想创建一个包含 2 个元素列表之间的所有可能组合的列表,而不管列表的大小(它们的长度可能相同也可能不同)。我查看了 itertools 示例并搜索了 stackoverflow,但没有找到我正在寻找的确切示例。输入:l1 = ['a', 'b', 'c'] l2 = [1, 2]输出:['a1-b1-c1', 'a1-b1-c2', 'a1-b2-c1', 'a1-b2-c2', 'a2-b1-c1', 'a2-b1-c2', 'a2-b2-c1', 'a2-b2-c2']但同样,l1可以是任何大小,l2也可以是任何大小。根本不关心格式,只想要完整的输出。谢谢!
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您可以使用itertools.product生成 的所有可能的 3 组合l2,然后将每个组合与 连接起来l1。


from itertools import product


combs = product(map(str, l2), repeat=3)

['-'.join([x + y for x, y in zip(l1, c)]) for c in combs]

# ['a1-b1-c1', 'a1-b1-c2', 'a1-b2-c1', 'a1-b2-c2', 'a2-b1-c1', 'a2-b1-c2', 'a2-b2-c1', 'a2-b2-c2']



查看完整回答
反对 回复 2021-11-09
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

此解决方案从l1以下位置创建模板:例如。'a{}-b{}-c{}'


from itertools import product

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

l2 = [1, 2]

template = "{}-".join(l1) + "{}"

[template.format(*c) for c in product(l2, repeat=len(l1))]

['a1-b1-c1'、'a1-b1-c2'、'a1-b2-c1'、'a1-b2-c2'、'a2-b1-c1'、'a2-b1-c2'、' a2-b2-c1', 'a2-b2-c2']


查看完整回答
反对 回复 2021-11-09
?
慕沐林林

TA贡献2016条经验 获得超9个赞

您可以使用itertools.product并列出推导式来获得您所追求的结果:

from itertools import product
result = ["-".join(y+str(z) for y, z in zip(l1, x)) for x in product(*[l2] * 3)]

我想指出该方法不会产生任何额外的中间组合。

输出:

['a1-b1-c1', 'a1-b1-c2', 'a1-b2-c1', 'a1-b2-c2', 'a2-b1-c1', 'a2-b1-c2', 'a2-b2-c1', 'a2-b2-c2']



查看完整回答
反对 回复 2021-11-09
  • 3 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信