Search code examples
pythonitertools-groupby

Title: Python itertools.groupby gives inconsistent counts when printing only the counts


I'm using Python's itertools.groupby to count consecutive occurrences of elements as mentioned below

from itertools import groupby

data = [1, 1, 3, 2, 3, 3, 4, 5, 5]
sorted_data = sorted(data)
groups = groupby(sorted_data)

for key, group in groups:
   print(key, len(list(group)))

It produces the output as expected

1 2
2 1
3 3
4 1
5 2

But out of curiosity I tried to print the counts alone just to see what happens like below,

from itertools import groupby

data = [1, 1, 3, 2, 3, 3, 4, 5, 5]
sorted_data = sorted(data)
groups = groupby(sorted_data)

for group in groups:
   print(len(list(group)))

I get this response

2
2
2
2
2

I've encountered that the groupby function behaves differently when I try to print the counts alone versus when I print both the key and the count.

Why does groupby behave differently in these two cases? an explanation will be great.

Thanks in advance for your help!


Solution

  • your line

    print(len(list(group)))
    

    will always give 2. as group is a list of 2 items, where the first item is the index, and the second item is the iterator.

    i.e. your group is

    (1, <itertools._grouper object at 0x0000029681808220>)
    

    Instead replace it with

    print(len(list(list(group)[1])))