无法在列表综合之外检索itertools迭代器



考虑一下:

>>> res = [list(g) for k,g in itertools.groupby('abbba')]                                                                                                                                                           
>>> res                                                                                                                                                                                                             
[['a'], ['b', 'b', 'b'], ['a']]

然后这个:

>>> res = [g for k,g in itertools.groupby('abbba')]
>>> list(res[0])
[]

我对此感到困惑为什么它们返回不同的结果?

这是预期行为。文档非常清楚,grouper的迭代器与groupby迭代器共享:

返回的组本身就是一个迭代器,它共享底层可使用groupby((进行迭代。因为源是共享的,当groupby((对象被高级,上一个组不再可见。因此,如果以后需要这些数据,应该将其存储为列表。。。

您得到空列表的原因是迭代器在您尝试对其进行迭代时已经消耗殆尽。

import itertools 
res = [g for k,g in itertools.groupby('abbba')]
next(res[0])
# Raises StopIteration: 

最新更新