list等分,兩種實現方法
- 2019 年 12 月 4 日
- 筆記
將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. 大家平時可多多使用生成器
。