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

我想创建一个包含 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也可以是任何大小。根本不关心格式,只想要完整的输出。

谢谢!


牛魔王的故事
浏览 291回答 3
3回答

繁星点点滴滴

您可以使用itertools.product生成 的所有可能的 3 组合l2,然后将每个组合与 连接起来l1。from itertools import productcombs = 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']

慕姐4208626

此解决方案从l1以下位置创建模板:例如。'a{}-b{}-c{}'from itertools import productl1 = ['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']

慕沐林林

您可以使用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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python