我正在寻找一种 Pythonic 方法来(a,b) ≠ (b,a)
为包含偶数n
项的集合生成所有成对唯一的唯一配对(其中配对是由对组成的系统,并且成对唯一表示)。
我喜欢这里的代码:
for perm in itertools.permutations(range(n)):
print zip(perm[::2], perm[1::2])
除了它生成所有顺序唯一、成对唯一的配对,或者(n/2)!
比我想要的多倍的配对(冗余),虽然我可以过滤掉,但它确实让我的程序陷入了困境n
。
也就是说,对于n = 4
,我正在寻找以下输出(12 个唯一配对):
[(0, 1), (2, 3)]
[(0, 1), (3, 2)]
[(1, 0), (2, 3)]
[(1, 0), (3, 2)]
[(1, 2), (0, 3)]
[(1, 2), (3, 0)]
[(1, 3), (0, 2)]
[(2, 0), (1, 3)]
[(2, 0), (3, 1)]
[(3, 1), (0, 2)]
[(0, 3), (2, 1)]
[(3, 0), (2, 1)]
请注意(a,b) ≠ (b,a)
.
这可能吗?我也可以使用为 where 生成 3 个非成对唯一配对的函数,n = 4
因为(a,b) = (b,a)
从那里置换我需要的内容很简单。我的主要目标是避免配对中对的顺序进行多余的排列。
提前感谢您的帮助和建议——我真的很感激。