【发布时间】:2011-08-14 22:42:57
【问题描述】:
考虑以下交互式示例
>>> l=imap(str,xrange(1,4))
>>> list(l)
['1', '2', '3']
>>> list(l)
[]
有谁知道某处是否已经有一个带有 imap 版本(和其他 itertools 函数)的实现,以便第二次执行 list(l) 得到与第一次相同的结果。而且我不想要常规映射,因为如果您使用更大的范围,在内存中构建整个输出可能会浪费内存。
我想要一些基本上可以做类似事情的东西
class cmap:
def __init__(self, function, *iterators):
self._function = function
self._iterators = iterators
def __iter__(self):
return itertools.imap(self._function, *self._iterators)
def __len__(self):
return min( map(len, self._iterators) )
但如果有人已经这样做了,那么手动为所有 itertools 执行此操作将是浪费时间。
ps。 你认为容器比迭代器更禅宗吗,因为对于像
这样的迭代器for i in iterator:
do something
当您明确需要删除元素的容器时,隐式清空迭代器。
【问题讨论】: