Как мне получить вэй ghted случайный выбор из класса Python Counter?

У меня есть программа, в которой я отслеживаю успех различных вещей , используя коллекций.Счетчик - каждый успех вещи увеличивает соответствующий счетчик:

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 ​​()) .

Я знаю базовый алгоритм перебора списка неизвестной длины и справедливого случайного выбора элемента, но подозреваю, что есть что-то более элегантное. Что мне здесь делать?

12
задан Community 23 May 2017 в 12:17
поделиться