Создайте список как объект, используя 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]))
Другие вопросы по тегам