In this post, you’ll learn how to use Python to count the number of occurrences in a string. You’ll learn four different ways to accomplish this, including: the built-in string .count()
method and the fantastic counter
module.
Knowing how to do this is an incredibly useful skill, allowing you to find, say, duplicate values within a string or deleting unwanted characters (such as special characters).
The Easy Solution: Using String .count()
>>> a_string = 'the quick brown fox jumps over the lazy dog'
>>> print(a_string.count('o'))
4
Table of Contents
Count Number of Occurrences in a String with .count()
One of the built-in ways in which you can use Python to count the number of occurrences in a string is using the built-in string .count()
method. The method takes one argument, either a character or a substring, and returns the number of times that character exists in the string associated with the method.
This method is very simple to implement. In the example below, we’ll load a sample string and then count the number of times both just a character and a substring appear:
>>> a_string = 'the quick brown fox jumps over the lazy dog'
>>> print('o appears this many times: ', a_string.count('o'))
>>> print('the appears this many times: ', a_string.count('the'))
o appears this many times: 4
ui appears this many times: 2
In the example above you used the built-in string .count()
method to count the number of times both a single character and a string appeared in a larger string.
Count Number of Occurrences in a Python String with Counter
In order to find a more flexible and efficient way to count occurrences of a character in a Python string, you can also use the Counter object from the built-in collections
module. The module provides a number of helpful classes to work with, well, collections of different items.
In this case, our collection will be a string: 'the quick brown fox jumps over the lazy dog'
.
from collections import Counter
a_string = 'the quick brown fox jumps over the lazy dog'
collection = Counter(a_string)
print(collection)
# Returns: Counter({' ': 8, 'o': 4, 'e': 3, 't': 2, 'h': 2, 'u': 2, 'r': 2, 'q': 1, 'i': 1, 'c': 1, 'k': 1, 'b': 1, 'w': 1, 'n': 1, 'f': 1, 'x': 1, 'j': 1, 'm': 1, 'p': 1, 's': 1, 'v': 1, 'l': 1, 'a': 1, 'z': 1, 'y': 1, 'd': 1, 'g': 1})
What we’ve accomplished in the code above is the following:
- We imported
Counter
from the collections module - We then assigned our string to the variable
a_string
- We passed the string into a
Counter
object and called itcollection
- Finally, we printed the new
collection
object
What you can see is that what’s returned is a Counter object. We can confirm this by running print(type(collection))
which returns <class 'collections.Counter'>
.
What’s great about this class is that it contains a dictionary-like element that contains occurrences of every iterable item in the item that was passed in.
What this means is that we can access the occurrences of different items in our object by passing in a dictionary accessor.
In the example below, let’s see how we can see how often the letters a
and e
occur:
>>> print(collection['a'])
>>> print(collection['e'])
1
3
This is the magic of the Counter
class: it lets you easily access the count of occurrences in Python iterables, such as string.
Check out some other Python tutorials on datagy, including our complete guide to styling Pandas and our comprehensive overview of Pivot Tables in Pandas!
Use Regular Expressions (Regex) to Count Occurrences in a Python String
You can also use regular expressions (regex) to count the number of occurrences within a Python string. This approach is a little overkill, but if you’re familiar with regex, it can be an easy one to implement!
We’ll use the regular expression module, specifically the .findall()
method to load the indices of where the character or substring occurs. Finally, we’ll use Python’s built-in len()
function to see how often the character or substring occurs.
Let’s see how this works:
>>> import re
>>> a_string = 'the quick brown fox jumps over the lazy dog'
>>> print(len(re.findall('o', a_string)))
4
We can see that this approach is a bit of an odd way of doing things, especially when compared to the two methods above, covering the built-in .count()
method and the built-in Counter
class from collections.
Finally, let’s see how we can count occurrences using a for loop.
Use a For Loop to Count Occurrences in a Python String
Using a for loop in Python to count occurrences in a string is a bit of a naive solution, but it can come in handy at times.
The way it works, is that lists are items which you can iterate over (or, often called, iterables), meaning you can loop over each character in a string and count whether a character occurs or not.
Let’s implement the example below and then take a look at how we’ve accomplished everything:
a_string = 'the quick brown fox jumps over the lazy dog'
count_o = 0
for character in a_string:
if character == 'o':
count_o += 1
else:
pass
print(count_o)
# Returns: 4
What we’ve done here is:
- Initialized a new list
- Set the variable
count_o
to 0 - Looped over each
character
in the string and assessed if it’s equal too
. If it is, we increase thecount_o
variable by 1. Otherwise, we do nothing.
This solution works, but it’s a bit tedious to write out and it’s not very fast for larger string.
Conclusion
In this post, you learned how to use Python to count occurrences in a string using four different methods. In particular you learned how to count occurrences in a string using the built-in .count()
method, the Counter
class from collections, the .findall()
method from regular expression’s re
, as well as how to use a for loop.
If you want to learn more about the Counter
class, check out the official documentation here.
Pingback: regex count number of occurrences - loginfinance.com
x=’aabbccaazz’
I want in these order
{a:2,b:2,c:2,a:2,z:1}
Thanks for your comment! Which version of Python are you using? Dictionaries haven’t always been ordered, so just checking.
Hi ,you can try this below,
val = “jegatheeswaran sundaravadivel”
counts_dict = {}
for c in list(val):
if c not in counts_dict:
counts_dict[c] = 0
counts_dict[c] += 1
for key, value in counts_dict.items():
print(key, value)
#using counter module from collection package we can did
from collections import Counter
str = “aabbccaazz”
collection = counter(str)
print(collection)