我在Python中有一组150M整数,我想用它来过滤数据。这些整数中的每一个都是以32位格式存储的“用户ID”,我想删除集合中的所有用户。该集太大了,因为我需要将它传递给集群中的许多工作人员,其中每个工作人员的内存有限。因为我只需要二进制值(用户设置/不设置),使用bitarray执行此操作似乎是可行的。
ID从0开始并以大约300M结束(即用户的一半在集合中)。除了整数组中包含的位置外,整个比特数应设置为False(即0)。
我看过the bitstring
package和the bitarray
package,但我不确定哪个更适合我的目的以及我应该怎样做。任何人都可以提供一些指导或一个小例子,如何将我的设置转换为比特阵,然后使用它进行查找?
答案 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