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. 大家平时可多多使用生成器