Pythonで二つの文字列がアナグラムかどうかを判断する方法

目次

  1. はじめに
  2. アナグラムとは何か?
  3. Pythonでのアナグラム判定の基本的な方法
  4. コード例
  5. 応用例
  6. まとめ

1. はじめに

この記事では、Pythonを用いて二つの文字列がアナグラムであるかどうかを判断する方法について詳しく説明します。

2. アナグラムとは何か?

アナグラムとは、ある文字列の文字を並べ替えて別の意味を持つ文字列を作り出すことです。例えば、「listen」と「silent」はアナグラムの関係にあります。

3. Pythonでのアナグラム判定の基本的な方法

Pythonアナグラムを判定する基本的な方法は、二つの文字列が同じ文字を同じ数だけ含んでいるかどうかを確認することです。これは、両方の文字列をソートして比較することで実現できます。

def is_anagram(str1, str2):
    return sorted(str1) == sorted(str2)

4. コード例

以下は、Pythonを用いたアナグラムの判定の基本的なコード例です。

def is_anagram(str1, str2):
    return sorted(str1) == sorted(str2)

print(is_anagram('listen', 'silent'))  # True
print(is_anagram('hello', 'world'))  # False

5. 応用例

さらに複雑な応用例として、文字列のリストからアナグラムのペアを見つける関数を作成することもできます。

  1. アナグラムのペアを見つける

     def find_anagrams(word_list):
         anagrams = []
         for i in range(len(word_list)):
             for j in range(i+1, len(word_list)):
                 if is_anagram(word_list[i], word_list[j]):
                     anagrams.append((word_list[i], word_list[j]))
         return anagrams
    
     words = ['listen', 'silent', 'car', 'arc', 'hello', 'world']
     print(find_anagrams(words))  # [('listen', 'silent'), ('car', 'arc')]
    
  2. アナグラムのグループを見つける

     def group_anagrams(word_list):
         groups = {}
         for word in word_list:
             sorted_word = "".join(sorted(word))
             if sorted_word in groups:
                 groups[sorted_word].append(word)
             else:
                 groups[sorted_word] = [word]
         return list(groups.values())
    
     words = ['listen', 'silent', 'car', 'arc', 'hello', 'world']
     print(group_anagrams(words))  # [['listen', 'silent'], ['car', 'arc'], ['hello'], ['world']]
    
  3. 文字列が他の文字列のアナグラムの一部であるかを判断する

     def is_part_anagram(str1, str2):
         for char in str1:
             if char in str2:
                 str2 = str2.replace(char, '', 1)
             else:
                 return False
         return True
    
     print(is_part_anagram('listen', 'silent'))  # True
     print(is_part_anagram('hello', 'world'))  # False
     print(is_part_anagram('hell', 'hello'))  # True
     print(is_part_anagram('world', 'hello'))  # False
    

6. まとめ

この記事では、Pythonを用いて二つの文字列がアナグラムであるかどうかを判断する方法について学びました。また、より複雑な応用例を通してアナグラムの概念を深く理解することができました。