list 等分,两种实现方法
将 lst 等分为 size 组,如果 size 不大于 0,直接按一组返回。
方法 1:普通版
from math import ceil
def divide(lst, size):
if size <= 0:
return [lst]
return [lst[i * size:(i+1)*size] for i in range(0, ceil(len(lst) / size))]
divide([1, 3, 5, 7, 9], 0)# [[1, 3, 5, 7, 9]]
divide([1, 3, 5, 7, 9], 2)# [[1, 3], [5, 7], [9]]
方法 2:生成器版
优点:对内存友好
from math import ceil
def divide_iter(lst, n):
if n <= 0:
yield lst
return
i, div = 0, ceil(len(lst) / n)
while i < n:
yield lst[i * div: (i + 1) * div]
i += 1
list(divide_iter([1, 2, 3, 4, 5], 0)) # [[1, 2, 3, 4, 5]]
list(divide_iter([1, 2, 3, 4, 5], 2)) # [[1, 2, 3], [4, 5]]
带有yield
的函数返回的是生成器
(generator), 执行 list(divide_iter),生成器依次 yield. 大家平时可多多使用生成器
。
👍