Как сделать пары из двух без повторяющихся пар из списка - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь создать функцию, в которой список из диапазона от 1 до X помещается в список, состоящий из пар 2, затем перетасовываю пары X-1 раз, так что X-1 раз список пары i, j в 1, .., X, где 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]] 

Любые идеи высоко ценятся и заранее спасибо ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...