У меня есть программа, в которой я отслеживаю успех различных вещей , используя коллекций.Счетчик
- каждый успех вещи увеличивает соответствующий счетчик:
import collections
scoreboard = collections.Counter()
if test(thing):
scoreboard[thing]+ = 1
Затем, для будущих тестов, я хочу склониться к вещам , которые принесли наибольший успех. Counter.elements ()
казался идеальным для этого, поскольку он возвращает элементы (в произвольном порядке), повторенные количество раз, равное количеству. Итак, я решил, что могу просто сделать:
import random
nextthing=random.choice(scoreboard.elements())
Но нет, это вызывает TypeError: объект типа itertools.chain не имеет len () . Итак, random.choice
не может работать с итераторами . Но в этом случае длина известна (или известна) - это сумма (scoreboard.values ())
.
Я знаю базовый алгоритм перебора списка неизвестной длины и справедливого случайного выбора элемента, но подозреваю, что есть что-то более элегантное. Что мне здесь делать?