使用库pybloom_live
from pybloom_live import ScalableBloomFilter,BloomFilter
# 可自动伸缩的布隆过滤器
bloom = ScalableBloomFilter(initial_capacity=100,error_rate=0.001)
# 添加内容
bloom.add('daqi')
print('daqi'in bloom)
# 定长的布隆过滤器
bloom1 = BloomFilter(capacity=10000)
bloom1.add('daqi')
print('daqi'in bloom1)
手动实现一个简单的布隆过滤器
使用bitarray实现,将初始数组置为0,根据hash计算出节点置为1,同时写了一个生成随机码的函数用于测试。
import random
import mmh3
from bitarray import bitarray
import os.path
import re
# bitarray长度
BIT_SIZE = 50000
class BloomFilter():
def __init__(self):
bit_array = bitarray(BIT_SIZE)
bit_array.setall(0)
self.bit_array = bit_array
self.bit_size = self.length()
def get_points(self, url):
"""
生成需要插入的位置
:param url:
:return:节点的列表
"""
point_list = []
for i in range(7):
point = mmh3.hash(url,30+i) % self.bit_size
point_list.append(point)
return point_list
def add(self, url):
"""
添加url到bitarray中
:param url:
:return:
"""
res = self.bitarray_expand()
points = self.get_points(url)
try:
for point in points:
self.bit_array[point] = 1
return '注册完成!'
except Exception as e:
return e
def contains(self,url):
"""
验证url是否存在
:param url:
:return:True or False
"""
points = self.get_points(url)
# 在bitarray中查找对应的点,如果有一个点值为0就说明该url不存在
for p in points:
if self.bit_array[p] == 0:
return False
return True
def count(self):
"""
获取bitarrray中使用的节点数
:return: bitarray长度
"""
return self.bit_array.count()
def length(self):
"""
获取bitarray的长度
:return:bitarray的长度
"""
return len(self.bit_array)
def bitarray_expand(self):
"""
扩充bitarray长度
:return:bitarray的长度或使用率,布隆过滤器的bitarray的使用最好不要超过50%,这样误判率低一些
"""
isusespace = round(int(self.count()) / int(self.length()),4)
if 0.50 < isusespace:
# 新建bitarray
expand_bitarray = bitarray(BIT_SIZE)
expand_bitarray.setall(0)
# 增加新建的bitarray
self.bit_array = self.bit_array + expand_bitarray
self.bit_size = self.length()
return self.bit_size
else:
return f'长度尚可,{round(isusespace * 100,2)}%'
def get_captcha():
"""
生成用于测试的随机码
:return:
"""
seed = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
captcha = ""
for i in range(10):
captcha += random.choice(seed)
print(captcha)
return captcha
if __name__ == '__main__':
bloom = BloomFilter()
for i in range(100000):
bloom.add(f'www.{get_captcha()}.com')
print(bloom.length())
print(bloom.count())
print(bloom.count())
标签:
python,布隆过滤器
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“python使用布隆过滤器的实现示例”评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
2025年10月28日
2025年10月28日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]