Python风格:如何分批生成字符串、字节或列表的指定范围子集?
分批遍历序列(字符串/列表/bytes)的简洁Python实现
你想要的分批遍历逻辑,完全可以利用Python的序列切片和range步长特性来简化代码,不需要手动计算余数和索引:
def chunkify(seq, chunksize: int): for i in range(0, len(seq), chunksize): yield seq[i:i+chunksize]
测试验证:
>>> [i for i in chunkify("123456789", 2)] ['12', '34', '56', '78', '9'] >>> [i for i in chunkify(b'abcdefgh', 3)] [b'abc', b'def', b'gh'] >>> [i for i in chunkify([1,2,3,4,5], 2)] [[1,2], [3,4], [5]]
写法优势说明
- 借助
range(0, len(seq), chunksize)直接生成每个批次的起始索引,步长等于批次大小,自动覆盖所有完整批次 - Python切片
seq[i:i+chunksize]在i+chunksize超出序列长度时,会自动截断到末尾,无需额外判断余数,完美处理剩余元素 - 移除了冗余的
math.floor计算和余数判断,代码逻辑更直观,完全贴合Python简洁优雅的设计风格
这个实现和你原有的C风格代码功能完全一致,但可读性和简洁性提升明显,同时兼容所有支持切片操作的序列类型(字符串、列表、bytes等)。
内容的提问来源于stack exchange,提问作者Tomáš Zato
相关产品推荐
相关产品推荐

