Предположим, у меня есть список кортежей, элементами которых являются все возможные пары из списка:
т.е.
matchup=[('Mike','John'),('Mike','Mary'),('Mike','Jane'),('John','Mary'),('John','Jane'),('Mary','Jane')...]
Я бы хотел сократить список так, чтобы имя каждого человека появлялось дважды независимо от того, является ли он первым элементом в паре или вторым. Элемент кортежа может быть выбран более двух раз, если невозможно создать новую пару без этого.
Заранее спасибо.
редактирование:
Первоначально в списке я использовал цикл for, чтобы связать каждого человека с другим человеком наугад ала:
list=["John","Mike","Mary","Jane"]
pairing=[]
for person in list:
for i in range(2):
person2=random.sample(list(list),1)
this_match=str(person)+str(person2)
while this_match in pairing:
person2=random.sample(list(list),1)
this_match=str(person)+str(person2)
pairing.append(this_match)
Это привело к дублированию того же человека. Моя вторая попытка такая:
from itertools import combinations
import pandas as pd
from collections import Counter
possible_games = combinations(list, 2)
games = list(possible_games)
dupe_check=Counter(games)
print(dupe_check)
print (games, len(games))
Однако я не могу уменьшить элементы каждого кортежа, чтобы они выглядели как можно ближе к двум разам.
Один из возможных выводов может выглядеть следующим образом:
[('Mike','John'),('Mike','Mary'),('John','Mary'),("Mary","Jane"),("Jane","Mike")]
Джон появляется дважды. Джейн появляется дважды. Майк появляется три раза, чтобы Джейн появилась дважды. Мэри появляется три раза, а Джейн появляется дважды.