文章目录

  • 起因
  • 解决方案1:构造bitmap
  • 解决方案2:集合
  • 题外话

起因

我想用bitmap的原因是因为我写了一个B站用户的爬虫,是通过关系网进行爬取的,所以我需要确定一个ID是否已经被爬取过。B站ID的规则是从1开始递增的数字,现在最大的ID接近4亿了。所以我的程序运行到后面时非常慢,因为要比较一个ID是否存在50万个ID的列表里,也就是比较一个数字是否存在于一个存有大量数字的列表中
我共有3个解决方案,分别是自己实现bitmap,使用集合。

解决方案1:构造bitmap

因为Python不像C语言一样可以直接使用bit,在Python中如果要操作bit需要安装额外的库,我选择的是bitarray: anaconda自带了bitarray这个库,这个库的详细介绍:bitarray · PyPI
Linux下库的安装:

apt install python3-bitarray

使用方法如下:

>>> from bitarray import bitarray
>>> a = bitarray()            # create empty bitarray
>>> a.append(True)
>>> a.extend([False, True, True])
>>> a
bitarray('1011')

我构造了一个bitmap的类:

class BitMap:def __init__(self, size):self.size = sizeself.array = bitarray(size)self.array.setall(0)def set(self, index):self.array[index] = 1def test(self, index):if self.array[index] == 0:return Falseelse:return True

使用方法如下:

bitmap = BitMap(4*10)
bitmap.set(1)
if bitmap.test(1) == True:print(bitmap.array)

解决方案2:集合

判断一个ID是否出现过的一个比较好的办法是使用集合,Python自带集合set,使用集合确实是很方便的一件事,但是因为我想到直接构造bitmap更省空间更快,我就没有使用集合了。

题外话

Python2有一个bitmap的库,但是并不好用,感兴趣的可以用一下,安装方法和使用方法如下:

pip install bitmap
from bitmap import BitMap
bm = BitMap(32)
print bm.tostring()
bm.set(1)
print bm.test(1)
print bm.tostring()

更详细的说明见bitmap · PyPI
如果有好用的Python3的bitmap库,欢迎告诉我。

参考资料:

  • How to create an array of bits in Python? - Stack Overflow
  • 【大数据算法】BitMap的原理和实现

Python中bitmap数据结构的构造和使用相关推荐

  1. Python中的数据结构

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:磐创AI 概述 在深入研究数据科学和模型构建之前,Pyt ...

  2. python中定义数据结构_Python中的数据结构—简介

    python中定义数据结构 You have multiples algorithms, the steps of which require fetching the smallest value ...

  3. python中定义数据结构_Python中的数据结构。

    python中定义数据结构 I remembered the day when I made up my mind to learn python then the very first things ...

  4. Python基石 | Python中的数据结构详解

    概述 在深入研究数据科学和模型构建之前,Python中的数据结构是一个需要学习的关键内容 了解Python提供的不同数据结构,包括列表.元组等 介绍 数据结构听起来是一个非常直截了当的话题,但许多数据 ...

  5. python中的数据结构之deque

    数据结构 数据结构真的很简单,不要被这个高大上的名字所欺骗了. 双端队列 什么是双端队列? 就是元素可以从两端进行添加,或者从两端进行删除. from collections import deque ...

  6. python数据结构包括什么_Python中的数据结构详解

    概述 在深入研究数据科学和模型构建之前,Python中的数据结构是一个需要学习的关键内容 了解Python提供的不同数据结构,包括列表.元组等 介绍 数据结构听起来是一个非常直截了当的话题,但许多数据 ...

  7. python需要学数据结构吗_Python新手学习基础之数据结构-对数据结构的认知

    什么是数据结构? 数据结构是指:相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 举个列子来理解这个数据结构: 数据可以比作是书本, 数据结构相当于书架,书存放在书架上, ...

  8. python中的magic方法

    在魔法init中不能定义相应的返回函数 class A:def __init__(self):return "A for A-cup"a=A() #出错说明在进行调用的时候 __i ...

  9. linux python json,在Python中使用JSON

    在服务器和客户端的数据交互的时候,要找到一种数据格式,服务端好处理,客户端也好处理,这种数据格式应该是一种统一的标准,不管在哪里端处理起来都是统一的,现在这种数据格式非常的多,比如最早的xml,再后来 ...

最新文章

  1. Vue-cli3.0Mock数据使用
  2. cmake中添加 -g编译选项
  3. 2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - G. 正则问题
  4. bk3432开发的应用实例_《Javaweb开发实例大全》限时免费啦!
  5. 函数可重入性及编写规范
  6. linux命令 dstat,关于linux:每天学一个-Linux-命令103dstat
  7. vue inheritAttrs、$attrs和$listeners使用
  8. spring注解( @Autowired、@Qualifier、@Resource、@PostConstruct、@PreDestroy、 @Component、@Scope)-描述的比较清楚
  9. hdu4504java
  10. DCGAN训练人脸照片,pytorch
  11. 【工具推荐】下载你在博客园的文章原稿
  12. 【python】微信朋友圈分析
  13. C语言候老师,两本留言册背后的C语言老师
  14. unity基础(3)——从Unity Asset store获取资源
  15. 【C语言】简单猜字游戏
  16. 《中国古代文化常识》读书笔记
  17. 实训项目——多语言学习app 总结报告
  18. axios的post请求
  19. 单片机只会调库和复制别人的代码是什么水平?
  20. 【遍历csv文件按年份统计各列个数并批量输出】

热门文章

  1. 为什么 Biopython 的在线 BLAST 这么慢?
  2. GitHub 的项目徽章
  3. 为实现流行病预测:联邦政府在疫情暴发建模方面的努力和机遇
  4. Science:又一明星菌群可以调控肠道免疫?
  5. QIIME 2用户文档. 14机器学习预测样品元数据分类和回归q2-sample-classifier(2018.11)
  6. 水稻微生物组时间序列分析
  7. 新年开工——相关性分析了解一下?
  8. 不限文件类型的ftp服务器,ftp服务器文件类型
  9. python使用matplotlib可视化不同年份、不同项目的均值(mean)对比条形图(bar plot comparision of mean with different years)
  10. R语言使用pwr包的pwr.t.test函数对分组样本数相同的t检验进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量