gpt4 book ai didi

Python:生成所有成对唯一配对

转载 作者:太空狗 更新时间:2023-10-30 00:14:59 25 4
gpt4 key购买 nike

我正在寻找一种 Pythonic 方法来生成所有成对唯一的唯一配对(其中配对是一个由对组成的系统,成对唯一表示 (a,b) ≠ (b,a)) 对于包含偶数个 n 项的集合。

我喜欢 here 中的代码:

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)

这可能吗?我也同意为 n = 4 生成 3 个非成对唯一配对的函数,其中 (a,b) = (b,a),因为它很容易从那里置换我需要的东西。 我的主要目标是避免配对中配对顺序的多余排列。

在此先感谢您的帮助和建议——非常感谢。

最佳答案

我认为这为您提供了所需的基本配对:N=2 时为 1; 3 当 N=4 时;当 N=6 时为 15; 105 当 n=8

import sys

def pairings(remainder, partial = None):
partial = partial or []

if len(remainder) == 0:
yield partial

else:
for i in xrange(1, len(remainder)):
pair = [[remainder[0], remainder[i]]]
r1 = remainder[1:i]
r2 = remainder[i+1:]
for p in pairings(r1 + r2, partial + pair):
yield p

def main():
n = int(sys.argv[1])
items = list(range(n))
for p in pairings(items):
print p

main()

关于Python:生成所有成对唯一配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com