4

我需要在 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:。我想我需要使用迭代器或可迭代的,但我不知道该怎么做。这可能吗?如何?

4

1 回答 1

2

bitarrays 支持一种itersearch方法,该方法迭代一个位数组出现在另一个位数组的所有位置。使用它:

def __iter__(self):
    return self.bits.itersearch(bitarray([True]))
于 2013-07-31T22:28:58.793 回答