gpt4 book ai didi

python - 为什么一个 itertools.groupby 分组只能迭代一次?

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:08 24 4
gpt4 key购买 nike

我最近不得不调试一些像这样的代码:

for key, group in itertools.groupby(csvGrid, lambda x: x[0]):
value1 = sum(row[1] for row in group)
value2 = sum(row[2] for row in group)
results.append([key, value1, value2])

在每个结果集中,value2 的结果为 0。当我查看它时,我发现代码第一次迭代 group 时,它消耗了它,所以第二次迭代时只有零个元素。

直觉上,我希望 group 是一个可以迭代无限次的列表,但它的行为就像一个只能迭代一次的迭代器。出现这种情况有什么充分的理由吗?

最佳答案

itertools 是一个迭代器库,就像库中的其他所有东西一样,itertools.groupby 组也是迭代器。 itertools 中没有一个函数返回一个序列。

groupby 组是迭代器的原因与 itertools 中的其他所有内容都是迭代器的原因相同:

  1. 内存效率更高。
  2. 组可以是无限的。
  3. 您可以立即得到结果,而不是等待整个团队都准备好。

此外,组是迭代器,因为您可能只需要键,在这种情况下实现组将是一种浪费。

itertools.groupby 并非旨在与任何 LINQ 构造、SQL 子句或其他名称为“group by”的事物完全匹配。它的分组行为比 LINQ 或 SQL 更接近 Unix 的 uniq 命令的扩展,尽管它进行分组的事实意味着它也不是 uniq 的精确匹配。

作为您可以使用 itertools.groupby 完成但我提到的其他工具无法完成的事情的示例,这是一个游程长度编码器:

def runlengthencode(iterable):
for key, group in groupby(iterable):
yield (key, sum(1 for val in group))

关于python - 为什么一个 itertools.groupby 分组只能迭代一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com