itertools.tee不制作groupby迭代器的副本

问题描述 投票:0回答:1

我刚刚了解到itertools.tee()可用于给定迭代器的任意数量的副本。

因此,我试图创建两个groupby副本,并在每个副本上循环。但是,第二个迭代器不返回任何组。

l = [("a", 1), ("a", 2), ("b", 3), ("b", 4)]
groups = itertools.groupby(l, lambda x: x[0])

groups1, groups2 = itertools.tee(groups, 2)

for key, group in groups1:
    print(key + ": " + str(list(group)))

for key, group in groups2:
    print(key + ": " + str(list(group)))

而且,我在文档中发现了这一点,当tee()的速度不比list()快时,我无法完全理解>

此itertool可能需要大量辅助存储(取决于需要存储多少临时数据)。一般来说,如果迭代器会在另一个迭代器启动之前使用大部分或全部数据,使用list()代替tee()更快。

任何帮助将不胜感激。谢谢!

我刚刚了解到itertools.tee()可用于制作给定迭代器的任意数量的副本。因此,我尝试创建groupby的两个副本,并在每个副本上循环。但是,第二个...

python itertools
1个回答
0
投票

groupby是一个嵌套的迭代器; “外部”返回_grouper对象的序列,每个对象也是一个迭代器。您成功tee外部的迭代器,但是内部的迭代器没有被复制,因此在第一个循环中它们被用尽。如果您会注意到,您的第二个循环does

© www.soinside.com 2019 - 2024. All rights reserved.