Python 准时制列表

Python 准时制列表,python,list,iterator,Python,List,Iterator,我想知道在标准库或pypi中是否有一个类符合这种描述 构造函数将采用迭代器 它将实现容器协议(即uuu getitem uuuuuu、uuuuu len uuuuuuuu等),以便切片、长度等可以工作。这样,它将迭代并从构造函数参数中保留足够的值,以提供所请求的任何信息 因此,如果请求jitlist[6],它将调用self.source.next()7次,将这些元素保存在其列表中,并返回最后一个元素 这将允许下游代码将其用作列表,但避免在不需要列表功能的情况下不必要地实例化列表,并避免在仅请求少

我想知道在标准库或pypi中是否有一个类符合这种描述

构造函数将采用迭代器

它将实现容器协议(即uuu getitem uuuuuu、uuuuu len uuuuuuuu等),以便切片、长度等可以工作。这样,它将迭代并从构造函数参数中保留足够的值,以提供所请求的任何信息

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

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


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

如果不先迭代源代码,它将如何实现
\uuuuuu len\uuuuu
,它将迭代源代码以响应
\uuuu len\uuu
列表。extend
将任意iterable作为其参数,因此,您可以将
.extend(list(itertools.islice(self.it,n)))
写成
.extend(itertools.islice(self.it,n))
@Mike Graham:谢谢您的改进
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]