我试图在python3中找到两个列表x和y中元素的每个唯一组合,这样对于每个组合,列表y中的所有元素都与列表x中的一个元素配对(min(x,y)
max(x,y)
组合)。例如,在以下情况下:
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.compositions、itertools.product和itertools.permutations,但它们似乎都没有给出我想要的东西。当与zip
(参见this answer)一起使用时,itertools.permutations让我感觉非常接近,但在某种意义上,结果列表是独占的,任何一个列表中的元素都不能在单个组合中重复(例如[('a', 1), ('a', 2), ('c', 3)]
),这不是我想要的。itertools是否适用于此,还是需要从头开始编写
这里是组合_与_替换和置换的组合,产生27
收益率:
对我来说,这看起来像是
itertools.product
和zip
的任务,我会:输出:
注意^{} 的里程表性质
无导入的基本递归解决方案:
输出:
相关问题 更多 >
编程相关推荐