python自带intertool模块找不到_Python itertools模块 可能的Python代码实现

头部

from numbers import Number as _number

from operator import add as _add

_no_arg=object()

accumulate()

def accumulate(iterable, func=None, *, initial=None):

if func is None:

func=_add

iterator=iter(iterable)

if initial is None:

try:

initial=next(iterator)

except StopIteration:

return

yield initial

for i in iterator:

initial=func(initial,i)

yield initial

chain()

def chain(*iterables):

for iterable in iterables:

yield from iterable

class chain:

def __init__(self,*iterables):

self.__iterables=map(iter,iterables)

self.__doing=self.__iterables.__next__()

def __iter__(self):

return self

def __next__(self):

while True:

try:

return next(self.__doing)

except StopIteration:

self.__doing=self.__iterables.__next__()

@classmethod

def from_iterable(cls,iterable,/):

return cls(*iterable)

combinations()

还没写出来……

combinations_with_replacement()

还没写出来……

compress()

def compress(data, selectors):

for i,j in zip(data,selectors):

if j:

yield i

count()

class count:

def __init__(self,start,step=1):

if isinstance(start,_number) and isinstance(step,_number):

self.__start=start

self.__step=step

else:

raise TypeError("a number is required")

def __iter__(self):

return self

def __next__(self):

temp=self.__start

self.__start+=self.__step

return temp

cycle()

def cycle(iterable, /):

save=[]

for i in iterable:

yield i

save.append(i)

if save:

while True:

yield from save

dropwhile()

def dropwhile(predicate, iterable, /):

it=iter(iterable)

for i in it:

if not predicate(i):

yield i

yield from it

filterfalse()

def filterfalse(function, iterable, /):

if function is None:

for i in iterable:

if not i:

yield i

else:

for i in iterable:

if not function(i):

yield i

groupby()

def groupby():

...

islice()

class islice:

def __init__(self,iterable,start=None,stop=None,step=None,/):

if step is None:

self.__c=0

step=1

elif isinstance(step,int) and step>0:

self.__c=step-1

else:

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

else:

raise ValueError("Stop argument for islice() must be None or a non-negative integer")

self.__a=start

self.__it=iter(iterable)

def __iter__(self):

return self

def __next__(self):

while self.__a:

self.__it.__next__()

self.__a-=1

if self.__b is None:

pass

elif self.__b>0:

self.__b-=1

else:

raise StopIteration

self.__a=self.__c

return self.__it.__next__()

permutations()

def permutations():

...

product()

def product(*iterables):

it=iter(iterables)

repeat()

class _repeat:

def __init__(self,object,/):

self.__obj=object

def __iter__(self):

return self

def __next__(self):

return self.__obj

def __length_hint__(self):

raise TypeError("len() of unsized object")

def __reduce__(self):

return self.__class__,(self.__obj,)

def __repr__(self):

return f'repeat({self.__obj!r})'

class repeat:

def __new__(cls,object,times=_no_arg):

if times is _no_arg:

return _repeat(object)

return object.__new__(cls)

def __init__(self,object,times):

if isinstance(times,int):

self.__times=times

else:

raise TypeError(f"'{object.__class__.__name__}' object cannot be interpreted as an integer")

self.__obj=object

def __iter__(self):

return self

def __next__(self):

if self.__times:

self.__times-=1

return self.__obj

raise StopIteration

def __length_hint__(self):

return self.__times

def __reduce__(self):

return self.__class__,(self.__obj,self.__times)

def __repr__(self):

return f'repeat({self.__obj!r}, {self.__times})'

starmap()

def starmap(function, iterable, /):

for i in iterable:

yield function(*i)

takewhile()

def takewhile(predicate, iterable, /):

for i in iterable:

if predicate(i):

break

else:

yield i

tee()

class node:

def __init__(self,value):

self.value = value

self.next = None

class _tee:

def __init__(self,iter,node):

self.iter = iter

self.node = node

def __iter__(self):

return self

def __next__(self):

if self.node.next is None:

try:

self.node.next = self.node = node(self.iter.__next__())

except StopIteration as err:

self.node.next = NotImplemented

raise err

elif self.node.next is NotImplemented:

raise StopIteration

else:

self.node = self.node.next

return self.node.value

def tee(iterable,n=2,/):

temp = []

iterator = iter(iterable)

init = node(None)

while n:

temp.append(_tee(iterator,init))

n-=1

return tuple(temp)

zip_longest()

class zip_longest:

def __init__(self,*iterables,fillvalue=None):

self.__iterators=tuple(iter(i) for i in iterables)

self.__filevalue=fillvalue

def __iter__(self):

return self

def __next__(self):

temp=[]

flag=True

for i in self.__iterators:

try:

temp.append(next(i))

flag=False

except StopIteration:

temp.append(self.__filevalue)

if flag:

raise StopIteration

return tuple(temp)

由于本人才疏学浅,代码难免有错误,还请列位多多原谅!

若是发现错误,可以在谈论区指正哦~

原文链接:https://www.cnblogs.com/NoneType/p/Python-itertools.html

本站声明:网站内容来源于网络,若有侵权,请联系我们,我们将及时处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值