鱼C论坛

 找回密码
 立即注册
查看: 1450|回复: 1

[技术交流] Python 实现 itertools.islice

[复制链接]
发表于 2020-4-10 08:30:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 永恒的蓝色梦想 于 2020-4-11 09:44 编辑
class islice:
    def __init__(self,iterable,start=None,stop=None,step=None,/):
        if step is None:
            step=1
        elif not isinstance(step,int) or step<=0:
            raise ValueError("Step argument for islice() must be None or a positive integer")

        if stop is None:
            stop,start=start,stop

        if start is None:
            start=0
        elif not isinstance(start,int) or start<0:
            raise ValueError("Start argument for islice() must be None or a non-negative integer")

        if stop is None:
            self.__b=None
        elif isinstance(stop,int)and stop>=0:
            self.__b=((stop-start-1)//step+1) if start<stop else 0
        else:
            raise ValueError("Stop argument for islice() must be None or a non-negative integer")
        
        self.__c=step-1
        self.__a=start
        self.__it=iter(iterable)

    def __iter__(self):
        return self

    def __next__(self):
        if self.__b is None:
            pass

        elif self.__b:
            self.__b-=1

        else:
            raise StopIteration

        while self.__a:
            self.__it.__next__()
            self.__a-=1

        self.__a=self.__c
        return self.__it.__next__()
如果代码有问题,欢迎在评论区指正!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-10 10:07:20 From FishC Mobile | 显示全部楼层
这次的要好好看看了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 09:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表