Esistono alcune implementazioni di tipi di dati di elenchi ordinati che corrisponderebbero ai vostri criteri. Due scelte popolari sono i moduli SortedContainers e blist. Ciascuno di questi moduli fornisce un tipo di dati SortedList che mantiene automaticamente gli elementi in ordine ordinato e consentirebbe l'inserimento rapido e le ricerche con limite inferiore/superiore. C'è anche un performance comparison che è utile.
Il codice equivalente utilizzando il tipo SortedList dal modulo SortedContainers sarebbe:
from sortedcontainers import SortedList
sl = SortedList()
# Start index of `x` values
start = sl.bisect_left(x)
# End index of `x` values
end = sl.bisect_right(x)
# Iterator for those values
iter(sl[start:end])
# Erase an element
del sl[start:end]
# Insert an element
sl.add(x)
# Iterate from lower bound
start = sl.bisect_left(x)
iter(sl[x] for x in range(start, len(sl)))
# Clear elements
sl.clear()
Tutte queste operazioni dovrebbe funzionare in modo efficiente su un tipo di elenco di dati ordinati.
È possibile selezionare la classe 'Counter' in python: http://docs.python.org/2/library/collections.html#collections.Counter – taocp
Esistono equivalenti per le funzioni/metodi che ho elencato? – MrP
'Counter' non è equivalente a' std :: multiset'. – juanchopanza