准时清单

时间:2010-05-25 12:21:27

标签: python list iterator

我想知道是否有适合此描述的标准库或pypi中的类。

构造函数将使用迭代器。

它将实现容器协议(即__getitem __,__ len__等),以便切片,长度等可以工作。在这样做时,它将迭代并保留其构造函数参数中足够的值,以提供所请求的任何信息。

因此,如果请求了jitlist [6],它将调用self.source.next()7次,将这些元素保存在其列表中,并返回最后一个。

这将允许下游代码将其用作列表,但是避免在不需要列表功能的情况下不必要地实例化列表,并且如果只有少数成员被请求则避免为整个列表分配内存。

它似乎很容易编写,但它似乎也很有用,很可能有人已经在模块中提供它。

1 个答案:

答案 0 :(得分:2)

import itertools
class Indexable(object):
    def __init__(self,it):
        self.it=it
        self.already_computed=[]
    def __iter__(self):
        for elt in self.it:
            self.already_computed.append(elt)
            yield elt
    def __getitem__(self,index):
        try:
            max_idx=index.stop
        except AttributeError:
            max_idx=index
        n=max_idx-len(self.already_computed)+1
        if n>0:
            self.already_computed.extend(itertools.islice(self.it,n))
        return self.already_computed[index]