Search code examples
pythonstringfrequency

Python - Counting Letter Frequency in a String


I want to write my each string's letter frequencies. My inputs and expected outputs are like this.

"aaaa" -> "a4"
"abb" -> "a1b2"
"abbb cc a" -> "a1b3 c2 a1"
"bbbaaacddddee" -> "b3a3c1d4e2"
"a   b" -> "a1 b1"

I found this solution but it gives the frequencies in random order. How can I do this?


Solution

  • Does this satisfy your needs?

    from itertools import groupby
    s = "bbbaaac ddddee aa"
    
    groups = groupby(s)
    result = [(label, sum(1 for _ in group)) for label, group in groups]
    res1 = "".join("{}{}".format(label, count) for label, count in result)
    # 'b3a3c1 1d4e2 1a2'
    
    # spaces just as spaces, do not include their count
    import re
    re.sub(' [0-9]+', ' ', res1)
    'b3a3c1 d4e2 a2'