我想知道是否有适合此描述的标准库或pypi中的类。
构造函数将使用迭代器。
它将实现容器协议(即__getitem __,__ len__等),以便切片,长度等可以工作。在这样做时,它将迭代并保留其构造函数参数中足够的值,以提供所请求的任何信息。
因此,如果请求了jitlist [6],它将调用self.source.next()7次,将这些元素保存在其列表中,并返回最后一个。
这将允许下游代码将其用作列表,但是避免在不需要列表功能的情况下不必要地实例化列表,并且如果只有少数成员被请求则避免为整个列表分配内存。
它似乎很容易编写,但它似乎也很有用,很可能有人已经在模块中提供它。
答案 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]