如何用更Pythonic写法或Python内置函数实现分批生成逻辑?
更Pythonic的批量拆分实现方式
方法一:利用divmod一次性计算完整批次与余数
divmod是Python内置函数,可同时返回商和余数,完美适配这类拆分场景:
def batch(number, batch_size): full_batches, remainder = divmod(number, batch_size) # 生成所有完整批次 yield from [batch_size] * full_batches # 有余数则生成最后一批 if remainder: yield remainder
调用list(batch(21, 10))会得到[10, 10, 1],逻辑清晰且高效。
方法二:简化循环逻辑
通过min()函数直接取当前剩余数与批次大小的较小值,砍掉冗余的条件分支:
def batch(number, batch_size): while number > 0: take = min(number, batch_size) yield take number -= take
这个版本保留了生成器的惰性特性,代码更紧凑,可读性更强。
方法三:一行生成器表达式(适合临时场景)
如果无需封装成函数,也可以用一行生成器快速实现:
number = 21 batch_size = 10 batches = (batch_size if i < number // batch_size else number % batch_size for i in range((number + batch_size - 1) // batch_size)) print(list(batches)) # 输出 [10,10,1]
不过这种写法可读性稍弱,更适合临时快速使用的场景。
内容的提问来源于stack exchange,提问作者Baz
相关产品推荐
相关产品推荐

