Itertools Groupby Object Not Outputting Correctly
Solution 1:
Per the docs, it is explicitly noted that advancing the groupby
object renders the previous group unusable (in practice, empty):
The returned group is itself an iterator that shares the underlying iterable with
groupby()
. Because the source is shared, when thegroupby()
object is advanced, the previous group is no longer visible. So, if that data is needed later, it should be stored as a list.
Basically, instead of list
-ifying directly with the list
constructor, you'd need a listcomp that converts from group iterators to list
s before advancing the groupby
object, replacing:
group_list = list(itertools.groupby(nums, key=lambda x: x>=0))
with:
group_list = [(k, list(g)) for k, g in itertools.groupby(nums, key=lambda x: x>=0)]
The design of most itertools
module types is intended to avoid storing data implicitly, because they're intended to be used with potentially huge inputs. If all the groupers stored copies of all the data from the input (and the groupby
object had to be sure to retroactively populate them), it would get ugly, and potentially blow memory by accident. By forcing you to make storing the values explicit, you don't accidentally store unbounded amounts of data unintentionally, per the Zen of Python:
Explicit is better than implicit.
Post a Comment for "Itertools Groupby Object Not Outputting Correctly"