''' mbinary ######################################################################### # File : bloomFilter.py # Author: mbinary # Mail: zhuheqin1@gmail.com # Blog: https://mbinary.xyz # Github: https://github.com/mbinary # Created Time: 2018-10-17 11:19 # Description: ######################################################################### ''' from bitarray import bitarray import mmh3 class bloomFilter(set): def __init__(self, size, hash_count): super(bloomFilter, self).__init__() self.bits = bitarray(size) self.bits.setall(0) self.size = size self.hash_count = hash_count def __len__(self): return self.size def __iter__(self): return iter(self.bits) def add(self, item): for i in range(self.hash_count): idx = mmh3.hash(item, i) % self.size self.bits[idx] = 1 return self def __contains__(self, item): idxs = [mmh3.hash(item, i) % self.size for i in range(self.hash_count)] return all([self.bits[i] == 1 for i in idxs])