【发布时间】:2020-02-10 08:18:16
【问题描述】:
我试图在 python3 中找到两个列表 x 和 y 中元素的每个唯一组合,这样对于每个组合,列表 y 中的所有元素都与列表 x 中的一个元素配对(min(x,y) ^ @987654323 @组合)。例如,使用以下内容:
x = ['a', 'b', 'c']
y = [1, 2, 3]
combos = get_combos(x,y)
for combo in combos:
print(combo)
...我想写get_combos(x, y),这样它会返回一个包含 27 对组合的列表,打印时看起来像:
[('a', 1) ('a', 2) ('a', 3)]
[('a', 1) ('a', 2) ('b', 3)]
[('a', 1) ('a', 2) ('c', 3)]
[('a', 1) ('b', 2) ('a', 3)]
[('a', 1) ('b', 2) ('b', 3)]
[('a', 1) ('b', 2) ('c', 3)]
[('a', 1) ('c', 2) ('a', 3)]
[('a', 1) ('c', 2) ('b', 3)]
[('a', 1) ('c', 2) ('c', 3)]
[('b', 1) ('a', 2) ('a', 3)]
[('b', 1) ('a', 2) ('b', 3)]
[('b', 1) ('a', 2) ('c', 3)]
[('b', 1) ('b', 2) ('a', 3)]
[('b', 1) ('b', 2) ('b', 3)]
[('b', 1) ('b', 2) ('c', 3)]
[('b', 1) ('c', 2) ('a', 3)]
[('b', 1) ('c', 2) ('b', 3)]
[('b', 1) ('c', 2) ('c', 3)]
[('c', 1) ('a', 2) ('a', 3)]
[('c', 1) ('a', 2) ('b', 3)]
[('c', 1) ('a', 2) ('c', 3)]
[('c', 1) ('b', 2) ('a', 3)]
[('c', 1) ('b', 2) ('b', 3)]
[('c', 1) ('b', 2) ('c', 3)]
[('c', 1) ('c', 2) ('a', 3)]
[('c', 1) ('c', 2) ('b', 3)]
[('c', 1) ('c', 2) ('c', 3)]
我查看了 itertools.combinations、itertools.product 和 itertools.permutations,但它们似乎都没有提供我正在寻找的东西。当与zip 一起使用时,itertools.permutations 让我很接近(请参阅this answer),但结果列表是排他性的,因为任一列表中的任何元素都不能在单个组合中重复(例如,[('a', 1), ('a', 2), ('c', 3)] 将被留下out),这不是我想要的。 itertools 会为此工作还是需要从头开始编写?
【问题讨论】:
标签: python list combinations