Python中如何实现整数元组的可逆压缩及还原?
解决方案:基于位拼接的可逆压缩方案
因为你的元组长度固定为5,且每个元素的取值范围是0~100000,刚好小于2^17(131072),所以可以通过位运算把5个整数拼接成单个整数,运算速度极快,且完全可逆。
实现代码
# 每个元素分配的位宽,2^17=131072 > 100000,足够存储所有元素 BITS_PER_NUM = 17 # 位掩码,用于解压时提取低17位 MASK = (1 << BITS_PER_NUM) - 1 def compress(tup): res = 0 for i, num in enumerate(tup): res |= num << (i * BITS_PER_NUM) return res def decompress(compressed_val): tup = [] val = compressed_val for _ in range(5): tup.append(val & MASK) val >>= BITS_PER_NUM return tuple(tup)
使用示例
test_tuple = (520, 203, 9721, 12, 4839) compressed = compress(test_tuple) og_tuple = decompress(compressed) print(compressed) # 输出压缩后的单个整数 print(og_tuple == test_tuple) # 输出True,验证还原正确性
方案优势
- 运算效率极高:全程只有位运算,无额外IO、编码开销,适合处理大量元组的场景
- 内存占用极低:压缩后的值是一个85位的整数,存储仅需要约11字节,远小于原生5元素整数元组的内存占用
- 无信息损失:可以100%还原原始元组的所有值
内容的提问来源于stack exchange,提问作者Nick Keener
相关产品推荐
相关产品推荐

