Вы можете сделать следующее, довольно наивно, но эффективно:
for p in itertools.combinations(L,2) :
o = tuple(x for x in L if x not in p)
print(p, o)
('P1', 'P2') ('P3', 'P4')
('P1', 'P3') ('P2', 'P4')
('P1', 'P4') ('P2', 'P3')
('P2', 'P3') ('P1', 'P4')
('P2', 'P4') ('P1', 'P3')
('P3', 'P4') ('P1', 'P2')
Для большего количества игроков вы можете сделать:
L = ["P1", "P2", "P3", "P4", "P5"]
for p in itertools.combinations(L,2) :
o = [x for x in L if x not in p]
for x in itertools.combinations(o, 2):
print(p, x)
Что бы вы дали двойной круговой прием; ) Для одного кругового приема:
for p in itertools.combinations(L,2) :
o = [x for x in L if x > p[0] and x != p[1]]
for x in itertools.combinations(o, 2):
print(p, x)
('P1', 'P2') ('P3', 'P4')
('P1', 'P2') ('P3', 'P5')
('P1', 'P2') ('P4', 'P5')
('P1', 'P3') ('P2', 'P4')
('P1', 'P3') ('P2', 'P5')
('P1', 'P3') ('P4', 'P5')
('P1', 'P4') ('P2', 'P3')
('P1', 'P4') ('P2', 'P5')
('P1', 'P4') ('P3', 'P5')
('P1', 'P5') ('P2', 'P3')
('P1', 'P5') ('P2', 'P4')
('P1', 'P5') ('P3', 'P4')
('P2', 'P3') ('P4', 'P5')
('P2', 'P4') ('P3', 'P5')
('P2', 'P5') ('P3', 'P4')