- 前言
- 实现原理
- 一个人尽皆知的算法
- 类比
- 动手
- 优化
- 总结
如果要用socket传输一系列的数据,有大量的bool类型的数据时,可以怎么压缩?
这里有一种简单的压缩!(以及解压缩)
这是一道简单到不能再简单的入门题了:
给一个数字,输出它每一位上的数字
这很简单,对吧?只要把把它不停对10取余并砍掉个位即可。
类比12345变成1 2 3 4 5
那么我们也可以让10100变成1 0 1 0 0
既然每一位只储存两种数字,那么就可以把它变成整数,用2代替10.
有了上面的代码很快就能写好:
def int2bool_notsafe(num):
lst = []
while num>0:
lst.append(bool(num%2))
num //= 2
lst.reverse()
return lst
def bool2int_notsafe(bools):
num = 0
for b in bools:
num += b
num *= 2
num //= 2
return num
优化
写是写好了,但结果不好。理论上,int2bool(bool2int(bools)) == bools应该是为真的,但是并不一定。当bools列表是以False开头时,高位就会因为0而截掉。解决方法也很简单,在开头补1即可。
def int2bool(num):
lst = []
while num>0:
lst.append(bool(num%2))
num //= 2
lst.reverse()
return lst[1::] # [1]
def bool2int(bools):
bools = (True, *bools) # [2]
num = 0
for b in bools:
num += b
num *= 2
num //= 2
return num
【1】 把列表中多补的1去掉
【2】在可能以False开头的bool列表开头补上True,合成新元组
写完代码不要高兴的太早
本文发于CSDN于 2022/8/4 16:27


![[简单的算法] 整数变成布尔组 用python实现 [简单的算法] 整数变成布尔组 用python实现](http://www.mshxw.com/aiimages/31/1034296.png)
