Я никогда не сталкивался с подобной ситуацией в цикле Python for.
У меня есть словарь Names (key)
и Regions (value)
. Я хочу сопоставить каждое имя с двумя другими именами. Совпадающее имя не может быть самим собой, и обращение элементов не является действительным совпадением (1,2) = (2,1)
. Я не хочу, чтобы люди из одного региона были сопоставлены (если это не становится невозможным).
dict = {
"Tom":"Canada",
"Jerry":"USA",
"Peter":"USA",
"Pan":"Canada",
"Edgar":"France"
}
желаемый возможный вывод:
[('Tom','Jerry'),('Tom','Peter'),('Jerry','Pan'),('Pan','Peter'),('Edgar','Peter'),('Edgar','Jerry')]
Каждый появляется дважды, но Джерри и Питер появляются больше, чтобы у Эдгара было 2 матча с Именами из другого региона (Джерри и Питер должны быть выбраны здесь случайно)
Count: Tom: 2, Jerry: 3, Peter: 3, Pan: 2, Edgar: 2
Мой подход состоит в том, чтобы преобразовать имена в список, перемешать их, а затем создать пары кортежей, используя zip в пользовательской функции. После завершения функции. Я использую for
, чтобы проверить наличие пар из одной и той же области, если существует одна и та же область спаривания, а затем повторно запустить пользовательскую функцию. По какой-то причине, когда я печатаю результаты, я все еще вижу пары между одними и теми же регионами. Что мне здесь не хватает?
import random
names=list(dict.keys())
def pairing(x):
random.shuffle(x)
#each person is tupled twice, once with the neighbor on each side
pairs = list(zip(x, x[1:]+x[:1]))
return pairs
pairs=pairing(names) #assigns variable from function to 'pairs'
for matchup in pairs:
if dict[matchup[0]]==dict[matchup[1]]:
break
pairing(names)
pairs=pairing(names)
for matchup in pairs:
print(matchup[0] ,dict[matchup[0]] , matchup[1] , dict[matchup[1]])
Просто глядя на это, что-то явно сломано в цикле for, пожалуйста, помогите!
Я пробовал while
вместо if
в цикле for, но это не сработало.