In the vast landscape of Python’s standard library, there’s a hidden gem that can significantly simplify the task of counting occurrences within an iterable. Say hello to the collections.Counter
class, a versatile tool that effortlessly tallies the frequency of elements in your data. In this brief blog article, we’ll take a closer look at how you can harness the power of collections.Counter
to elegantly count the occurrences of characters in a string.
Tag: counter
The Python Counter
class from the collections
module is a powerful tool that we can also use for counting the occurrences of elements in a list.
Anagrams are strings that have the same letters but in a different order for example abc
, bca
, cab
, acb
, bac
are all anagrams, since they all contain the same letters.
We can check whether two strings are anagrams in Python in different ways. One way to do that would be to use Counter
from the collections
module.
From the documentation:
A Counter is a dict subclass for counting hashable objects. It is a collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts. The Counter class is similar to bags or multisets in other languages.
In plain English, with Counter
, we can get a dictionary that represents the frequency of elements in a list. Let us see this in an example:
from collections import Counter
print(Counter("Hello")) # Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})
Now we can use Counter
to quickly check whether two strings are anagrams or not:
from collections import Counter
def check_if_anagram(first_string, second_string):
first_string = first_string.lower()
second_string = second_string.lower()
return Counter(first_string) == Counter(second_string)
print(check_if_anagram('testinG', 'Testing')) # True
print(check_if_anagram('Here', 'Rehe')) # True
print(check_if_anagram('Know', 'Now')) # False
We can also check whether 2 strings are anagrams using sorted():
def check_if_anagram(first_word, second_word):
first_word = first_word.lower()
second_word = second_word.lower()
return sorted(first_word) == sorted(second_word)
print(check_if_anagram("testinG", "Testing")) # True
print(check_if_anagram("Here", "Rehe")) # True
print(check_if_anagram("Know", "Now")) # False
That’s basically it.
I hope you find this useful.