我刚刚了解到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的两个副本,并在每个副本上循环。但是,第二个...
groupby
是一个嵌套的迭代器; “外部”返回_grouper
对象的序列,每个对象也是一个迭代器。您成功tee
外部的迭代器,但是内部的迭代器没有被复制,因此在第一个循环中它们被用尽。如果您会注意到,您的第二个循环does