python中unique函数_Python:生成所有PairwiseUnique对

在关联问题“生成所有唯一对置换”(here)中,给出了一种生成任意给定n的循环调度算法。也就是说,n团队的每一组可能的对决/配对。在

因此,对于n=4(假设为排除),则为:[0, 3], [1, 2]

[0, 2], [3, 1]

[0, 1], [2, 3]

现在我们有了这些分区,我们只需要找到它们的排列,就可以得到完整的配对列表。i、 e[0,3],[1,2]是四个组的成员:[0,3],[1,2](本身)和[3,0],[1,2]和[0,3],[2,1]和[3,0],[2,1]。在

要从一个成员中获取一个组的所有成员,可以使用置换,其中每个对可以翻转也可以不翻转(例如,如果它们是n元组而不是成对,那么就有n个!每个选项)。因为你有两个对和选项,每个分区产生2^2对。你一共有12个。在

执行此操作的代码,其中round\u robin(n)返回对列表的列表。所以循环(4)>[[0,3],[1,2]],[[0,2],[3,1]],[[0,1],[2,3]]]。在

^{pr2}$

这个方法生成的数据比您想要的少,然后上升,而不是生成的比您想要的多,并且去掉一堆,所以它应该更有效。([::-1]是voodoo,用于不变地反转列表)。在

这是另一篇文章中的循环算法(由Theodros Zelleke撰写)from collections import deque

def round_robin_even(d, n):

for i in range(n - 1):

yield [[d[j], d[-j-1]] for j in range(n/2)]

d[0], d[-1] = d[-1], d[0]

d.rotate()

def round_robin_odd(d, n):

for i in range(n):

yield [[d[j], d[-j-1]] for j in range(n/2)]

d.rotate()

def round_robin(n):

d = deque(range(n))

if n % 2 == 0:

return list(round_robin_even(d, n))

else:

return list(round_robin_odd(d, n))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值