永恒的蓝色梦想 发表于 2020-3-31 17:27:20

实现了一下itertools.tee

闲得无事,写了个函数,实现了和 itertools.tee 类似的功能

这个函数有什么用?

这个 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)

永恒的蓝色梦想 发表于 2020-3-31 17:28:49

二楼

zltzlt 发表于 2020-3-31 17:31:12

def tee(iterable, n=2, /):
        return tuple(iterable for _ in range(n))

哈哈哈

一个账号 发表于 2020-3-31 20:42:12

你的鱼币肿么变成负数了{:10_277:}

永恒的蓝色梦想 发表于 2020-3-31 20:45:54

zltzlt 发表于 2020-3-31 17:31
哈哈哈

这个不行的,>>> from itertools import tee
>>> a,b,c=tee(.__iter__(),3)
>>> list(a)

>>> list(b)

>>> list(c)

>>> def tee(iterable, n=2, /):
      return tuple(iterable for _ in range(n))

>>> a,b,c=tee(.__iter__(),3)
>>> list(a)

>>> list(b)
[]
>>> list(c)
[]tee 需要复制出来的迭代器都能完整迭代一次
页: [1]
查看完整版本: 实现了一下itertools.tee