将整数集转换为bitarray以实现内存高效查找

时间:2017-06-07 00:45:05

标签: python int bitarray

我在Python中有一组150M整数,我想用它来过滤数据。这些整数中的每一个都是以32位格式存储的“用户ID”,我想删除集合中的所有用户。该集太大了,因为我需要将它传递给集群中的许多工作人员,其中每个工作人员的内存有限。因为我只需要二进制值(用户设置/不设置),使用bitarray执行此操作似乎是可行的。

ID从0开始并以大约300M结束(即用户的一半在集合中)。除了整数组中包含的位置外,整个比特数应设置为False(即0)。

我看过the bitstring packagethe bitarray package,但我不确定哪个更适合我的目的以及我应该怎样做。任何人都可以提供一些指导或一个小例子,如何将我的设置转换为比特阵,然后使用它进行查找?

1 个答案:

答案 0 :(得分:1)

就我个人而言,我更喜欢bitarray并假设你有这样一套(只有更大):

# Just some random set
myset = {5, 27, 142, 824}

然后,您可以使用bitarray创建仅包含bitarray的{​​{1}}(适当长度):

False

但是,从from bitarray import bitarray ba = bitarray(1000) # length 1000 ba.setall(False) # contains only zeros 创建一个没有本机支持,因此您需要一个循环来设置适当的值:

set

你可以通过编制索引检查价值:

for item in myset:
    ba[item] = True