我需要在Python中跟踪一组大约1000万个数字。 (所有数字都在0到2 ^ 32之间)。我会事先知道一个整数的最大值,并且在0到最大值之间,20-80%的值将在集合中。
我当前的代码使用内置的set
。这样太慢了。就性能而言,最好的方法是使用bitarray(例如https://pypi.python.org/pypi/bitarray/)。
我很容易使用bitarray构建一个使用add(n)
和remove(n)
方法的类。我不知道该怎么办是支持for n in bitarray_set:
。我想我需要使用迭代器或迭代,但我不知道该怎么做。这可能吗?怎么样?
答案 0 :(得分:2)
bitarray
支持itersearch
方法,该方法遍历所有位置,其中一个位阵列发生在另一个位置。使用:
def __iter__(self):
return self.bits.itersearch(bitarray([True]))