Solved

How do I count sequences in Python with itertools groupby?

Posted on 2016-11-16
3
134 Views
Last Modified: 2016-11-17
I'm trying to use the itertools groupby function here:
https://docs.python.org/2/library/itertools.html#itertools.groupby

but there are no examples of how to do this with count.  Doing the following:
import itertools as itr
In [204]: list(itr.groupby('1222311'))
Out[204]:
[('1', <itertools._grouper at 0x3cae048>),
 ('2', <itertools._grouper at 0x3cae630>),
 ('3', <itertools._grouper at 0x3caedd8>),
 ('1', <itertools._grouper at 0x3cae1d0>)]

Open in new window

yields some indecipherable second element of each tuple.  What I want to get back from that is:
In [204]: list(itr.groupby('1222311'))
Out[204]:
[('1', 1),
 ('2', 3),
 ('3', 1),
 ('1', 2)]

Open in new window

though the order of elements within the tuples is irrelevant.  
I tried adding a second argument to the groupby (e.g. key=itr.count), but they all give errors.  How do I accomplish this and how do I use the keyfunc parameter of groupby?
0
Comment
Question by:ugeb
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 16

Accepted Solution

by:
Walter Ritzel earned 500 total points
ID: 41891826
The undecipherable object grouper is a lazy iterator, so in order to get the count for each of those elements, you need to get their len.

import itertools as itr
for a, b  in itr.groupby('1222311'):
    print("(%s,%s)" % (a, sum(1 for i in b)))

Open in new window


you could also write like this:
import itertools as itr
for a, b  in itr.groupby('1222311'):
    print("(%s,%s)" % (a, len(list(b))))

Open in new window

0
 
LVL 11

Author Comment

by:ugeb
ID: 41892272
Thank you, that's helpful.  What exactly is the iter group iterating? We already have the token, and then you're iterating over something that gives you a count.  It looks like, after some testing, that it's just the elements of the group.  I guess that's more useful in different scenarios with a more complicated grouping function.

How do I use the keyfunc parameter?  What functions would work there?  I've tried many different things, and they all give errors.
0
 
LVL 11

Author Closing Comment

by:ugeb
ID: 41892380
Okay, thanks to your help I figured out how to do it as a single list.  This is what I wanted to do:

[ (i[0],len(list(i[1]))) for i in itr.groupby('1113334')]
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

"The time has come," the Walrus said, "To talk of many things: Of sets--and lists--and dictionaries-- Of variable kinks-- And why you see it changing not-- And why so strange are strings." This part describes how variables and references (see …
Article by: Swadhin
Introduction of Lists in Python: There are six built-in types of sequences. Lists and tuples are the most common one. In this article we will see how to use Lists in python and how we can utilize it while doing our own program. In general we can al…
Learn the basics of if, else, and elif statements in Python 2.7. Use "if" statements to test a specified condition.: The structure of an if statement is as follows: (CODE) Use "else" statements to allow the execution of an alternative, if the …
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…

717 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question