Pythonにはビルトインのデータ構造がありません。これは3つの要件すべてを満たしています。
つまり、自分でツリーを実装するのはかなり簡単です。リスト上で行う操作のみであるため
import random
class ListDict(object):
def __init__(self):
self.item_to_position = {}
self.items = []
def add_item(self, item):
if item in self.item_to_position:
return
self.items.append(item)
self.item_to_position[item] = len(self.items)-1
def remove_item(self, item):
position = self.item_to_position.pop(item)
last_item = self.items.pop()
if position != len(self.items):
self.items[position] = last_item
self.item_to_position[last_item] = position
def choose_random_item(self):
return random.choice(self.items)
:
別のオプションはまた、その項目のリストを保持セットが効果的であるものを作成するために、リストと辞書を組み合わせることであろう.pop()
と.append()
のように、(ほとんどのPythonの実装では)一定以上の時間を費やすべきではありません。
これは多分インターフェイス設計の問題です。 tree/hashmapでランダムに選択するのは難しくありませんが、C++ STLのmap/unordered_mapでもランダムな選択をサポートしていません。 – richselian