I was looking around list comprehension and saw smth strange. Code:
a = [\'a\', \'a\', \'a\', \'b\', \'d\', \'d\', \'c\', \'c\', \'c\']
print [(len(list(g)),
When you call list()
on an itertools._grouper
object, you exhaust the object. Since you're doing this twice, the second instance results in a length of 0.
First:
if len(list(g))
now it's exhausted. Then:
(len(list(g)), k))
It will have a length of 0.
You can nest a generator/comprehension in your list
comprehension to exhaust the object and save the relevant data before processing it:
>>> [(y,x) if y>1 else x for x,y in ((k, len(list(g))) for k, g in groupby(a))]
[(3, 'a'), 'b', (2, 'd'), (3, 'c')]