Создайте список как объект, используя bitarray
Мне нужно отследить набор из примерно 10 миллионов номеров в Python. (Все числа от 0 до 2^32). Я буду знать, прежде чем макс целое число, и, между 0 и макс, между 20-80% значений будет в наборе.
Мой текущий код использует встроенный set
, Это слишком медленно. Что касается производительности, лучший способ сделать это с помощью bitarray (например, https://pypi.python.org/pypi/bitarray/).
Мне легко использовать Bitarray для создания класса с add(n)
а также remove(n)
методы. Что я не знаю, как это сделать, это поддержка for n in bitarray_set:
, Я думаю, что мне нужно использовать итератор или итеративный, но я не уверен, как это сделать. Это возможно? Как?
1 ответ
bitarray
с поддержкой itersearch
метод, который перебирает все позиции, где один битрейр встречается в другом. Используйте это:
def __iter__(self):
return self.bits.itersearch(bitarray([True]))