如何用列表推导式将bytes对象分割为固定大小元素列表
分割bytes对象为固定大小的列表(忽略填充)
你原来的代码问题在于range(max_size)只会生成0到41的整数,无法正确生成切片所需的起始、结束索引对。以下是符合需求的列表推导式实现:
如果需要忽略最后一段不足指定大小的部分(仅保留长度恰好为max_size的bytes块):
max_size = 42 def foo(b: bytes): return [b[i:i+max_size] for i in range(0, len(b) - len(b) % max_size, max_size)]
如果允许保留最后一段长度小于max_size的块(仅忽略填充补全操作,而非丢弃短块):
max_size = 42 def foo(b: bytes): return [b[i:i+max_size] for i in range(0, len(b), max_size)]
逻辑说明
range(0, len(b), max_size)生成所有切片的起始索引,步长设为max_size,确保每个切片的起始位置精准对齐。- 第一种写法通过
len(b) - len(b) % max_size计算出最后一个完整块的结束位置,彻底避免生成不足长度的块,完全匹配“忽略填充”的需求。 - 列表推导式保持了你偏好的简洁、易读且高效的特性,无需冗余的普通for循环结构。
内容的提问来源于stack exchange,提问作者Vorac
相关产品推荐
相关产品推荐

