前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >list等分,两种实现方法

list等分,两种实现方法

作者头像
double
发布2019-12-04 20:21:57
6870
发布2019-12-04 20:21:57
举报
文章被收录于专栏:算法channel算法channel

将lst等分为size组,如果size不大于0,直接按一组返回。

方法1:普通版

代码语言:javascript
复制
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:生成器版

优点:对内存友好

代码语言:javascript
复制
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. 大家平时可多多使用生成器

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档