私は、さまざまなことの成功を追跡するプログラムを持っています。物事が成功するcollections.Counter
たびに、対応するカウンターがインクリメントされます。
import collections
scoreboard = collections.Counter()
if test(thing):
scoreboard[thing]+ = 1
次に、今後のテストのために、最も成功したものに偏らせたいと思います。Counter.elements()
カウントに等しい回数繰り返された要素を(任意の順序で)返すため、これには理想的であるように思われました。だから私はただできると思った:
import random
nextthing=random.choice(scoreboard.elements())
しかし、それはTypeError: object of type 'itertools.chain' has no len() を発生させます。わかりましたのでrandom.choice
、 iterators では動作しません。しかし、この場合、長さはわかっている (またはわかっている) — それはsum(scoreboard.values())
.
長さが不明なリストを繰り返し処理し、要素をランダムに選択するための基本的なアルゴリズムは知っていますが、もっと洗練されたものがあるのではないかと思います。私はここで何をすべきですか?