Я пытаюсь разрешить алгоритм мгновенного голосования на сток
Если вы не слышали об этом, это алгоритм, который выбирает кандидат, который имеет большинство высоких предпочтений существует.
Код: Выделить всё
# initializing empty list
fs = []
# adding first elements of sbublists to variable fs
for sublist in irv:
fs.append(sublist[0])
< /code>
Тогда я отсортировал больше всего и наименее частые элементы, используя счетчики счетчиков. < /p>
most_freq = [item for items, c in Counter(fs).most_common() for item in [items] * c]
least_freq = [item for items, c in Counter(fs).most_common() for item in [items] * c][-1]
< /code>
Я удалил дубликаты, используя встроенный набор типов данных: < /p>
check_freq = set(fs)
Я проверил корпус с помощью tie с использованием оператора if:
if len(check_freq) == len(fs):
return None
< /code>
Затем я исключил последнего кандидата и выберу победителя с более чем половиной голосов, инициализируйте пустой список для следующего этапа и исключил последнего кандидата, удалите дубликаты, используя встроенный набор типов данных. < /p>
sec_choice = most_freq[:-1]
winner = [item for items, c in Counter(sec_choice).most_common() for item in [items] * c]
sec_stage = []
for i in winner:
if winner[-1] != winner[-2]:
del winner[-1]
check_same = set(winner)
< /code>
Окончательный шаг - проверить длину набора и выберите победителя из остальных кандидатов. < /p>
if len(check_same) == 1:
return ''.join(check_same)
else:
if winner[-1] != winner[-2]:
del winner[-1]
return winner[-1]
< /code>
К сожалению, это не работает для случайного ввода.
Как я могу определить кандидата в выигрыш в описанном случае? < /p>
Можете ли вы помочь мне с этим алгоритмом? < /p>
Подробнее здесь: https://stackoverflow.com/questions/796 ... -hasnt-the