Python Anagrams and Palindromes examples

In this post:

  • anagram example
    • check two words if they are anagrams
    • extract anagrams from list
  • palindrome example
    • palindrome - python way
    • palindrome - with iteration

You can check also Anagrams and Palindromes in Java

Anagrams with python

Anagram is any word or sentence whose scrambled letters create a different word or phrase. Anagrams are words or phrases that share the same letters that appear in a different order.

Several examples:

  • ASTRONOMER -> MOON STARER
  • ELEVEN PLUS TWO -> TWELVE PLUS ONE
  • DORMITORY -> DIRTY ROOM

check two words if they are anagrams

Code example checking if two words are anagrams:

def checkAnagram(word1, word2):
    listWord1 = list(word1)
    listWord1.sort()
    listWord2 = list(word2)
    listWord2.sort()
    return (listWord1 == listWord2)

print(checkAnagram("face", "cafe"))
print(checkAnagram("face", "caffe"))

result:

True
False

Extract anagrams from list with python:

from collections import defaultdict

def extractAnagrams(word_List):
    d = defaultdict(list)
    for word in word_List:
        key = "".join(sorted(word))
        d[key].append(word)
    return d

def printAnagrams(word):
    d = extractAnagrams(word)
    for key, anagrams in d.items():
        if len(anagrams) > 1:
            print(key, anagrams)

word_List = ["face", "caffe", "cafe", "milk", "limk", "abc"]
printAnagrams(word_List)

result:

acef ['face', 'cafe']
iklm ['milk', 'limk']

Palindromes with python

Palindrome is a word or phrase that reads the same way - backwards and forwards. Palindromes are anagrams which differs from an anagram because it requires specific order. Checking if a word is a palindrome is much easier than anagrams.

Examples:

  • RADAR
  • RACECAR
  • CIVIC
  • NOON

palindrome - python way

Sample code checking if two words are palindromes:

wordA = 'banana'
wordB = 'ana'

def isPalindrome(word):
    return str(word) == str(word)[::-1]

def isPalindromeRev(word):
    return word == ''.join(reversed(word))

def isPalindromeLis(word):
    return list(word) == list(reversed(word))

print(isPalindrome(wordA))
print(isPalindrome(wordB))

print(isPalindromeRev(wordA))
print(isPalindromeRev(wordB))

print(isPalindromeLis(wordA))
print(isPalindromeLis(wordB))

result:

False
True
False
True
False
True

palindrome with iteration

The example above use more pythonic way of palindrome check. Another way by checking for palindromes is by iterating over the word. The next example show how to check a number if it's a palindrome:

numberA = 101
numberB = 1010

def numberPalidrome(n):
    temp=n
    rev=0
    while(n>0):
        dig=n%10
        rev=rev*10+dig
        n=n//10
    print(temp==rev)

numberPalidrome(numberA)
numberPalidrome(numberB)

result:

True
False

Related Article