You could do the following, rather naively but effectively:
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')
For more players, you can do:
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)
Which would you give a double round-robin ;)
For a single round-robin:
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')