2017-06-07 84 views
1

我有一套150M整數,我想用它來過濾數據。這些整數中的每一個都是以32位格式存儲的「用戶標識」,我想刪除集合中的所有用戶。該集合太大了,因爲我需要將其轉移到羣集上的許多工作人員,每個工作人員的內存量有限。由於我只需要一個二進制值(用戶已設置/未設置),因此使用bitarray進行此操作似乎是可行的。將整數集轉換爲一個bitarray進行內存有效查找

ID從0開始並在大約300M處結束(即,一半用戶在該集合中)。整個比特數應該設置爲False(即0),除了包含在該整數中的位置。

我已經看了the bitstring packagethe bitarray package,但我不知道這是我的目的,我應該如何去做得更好。任何人都可以提供一些指導或如何將我的設置轉換爲bitarray的小例子,然後使用它進行查找?

+0

有什麼理由,爲什麼你不能使用布隆過濾器?這聽起來像是他們的確切用例。 – JacaByte

回答

1

個人我喜歡bitarray並假設你有這樣的組(只有大):

from bitarray import bitarray 
ba = bitarray(1000) # length 1000 
ba.setall(False)  # contains only zeros 
:僅 False含有

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

然後,你可以使用bitarray創建bitarray(的適當長度)

但是,從set沒有本地支持創建一個,所以你需要一個循環來設置適當的值:

for item in myset: 
    ba[item] = True 

而且你可以檢查是否通過索引值:

print(ba[5]) # True 
print(ba[6]) # False 
print(ba[27]) # True 
相關問題