如何使两个成对而不从列表中重复出现

时间:2019-06-06 23:38:55

标签: python python-3.x list

我正在尝试创建一个函数,其中将范围1到X的列表放入由2对组成的列表中,然后将这对对洗净X-1次,以使X-1次出现在1,.. X中将i,j配对,其中i,j永远不相同。

这对是囚徒困境游戏中的玩家,他们与陌生人完美匹配。因此,我希望每个玩家都必须玩X-1个游戏,即与其他每个玩家对战一次。

播放器以[1,2,3,...X]的形式存储在列表中。这些对存储在列表[[1,2],[2,3],...]的列表中。

到目前为止,我已经能够创建第一轮,现在我想更改玩家列表,以便下一轮具有不同的对。我想这样做X-1次,但是(如我所说)应该没有重复的对。

players = list(range(1, int(input()+1)))
rounds = list(range(1, len(players)))

for round in rounds:
    pairs = []
    for idx, i in enumerate(players):
        a = players[idx]
        b = players[idx-1]
        if b > len(players):
            continue
        else:
            pairs.append([b,a])

    for idx, x in enumerate(pairs):
        c = pairs[idx]
        d = pairs[idx-1]
        if c[0] == d[1]:
            pairs.remove(c)

    print(pairs)

所以现在我需要更改一些内容,然后使用轮数对for循环进行迭代...

我在循环中尝试过此操作

players.append(players[1])
players.remove(players[1])

我的输出当前看起来像这样:

8 
[[1, 2], [3, 4], [5, 6], [7, 8]] 
[[1, 3], [4, 5], [6, 7], [8, 2]] 
[[1, 4], [5, 6], [7, 8], [2, 3]]
[[1, 5], [6, 7], [8, 2], [3, 4]]
[[1, 6], [7, 8], [2, 3], [4, 5]] 
[[1, 7], [8, 2], [3, 4], [5, 6]]
[[1, 8], [2, 3], [4, 5], [6, 7]] 

任何想法都会受到赞赏,并在此先感谢。

0 个答案:

没有答案