Python
 Computer >> コンピューター >  >> プログラミング >> Python

与えられたリストからのPythonグループアナグラム


このチュートリアルでは、すべてのアナグラムをリストにグループ化するプログラムを作成します。まず、アナグラムとは何かを見てみましょう。 。

同じ文字の順序が異なる2つの文字列は、アナグラムと呼ばれます。

ソリューションに飛び込む前に、例を見てみましょう。

入力

['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']

出力

[['cat', 'tac'], ['dog', 'god'], ['fried', 'fired'], ['pat', 'tap']]

問題を2つに分けます。まず、2つの文字列がアナグラムであるかどうかをチェックする関数を記述します。以下の手順に従って、アナグラムをチェックするコードを記述します。

  • 文字列を初期化します。
  • 両方の文字列を並べ替えます。
  • 並べ替えられた両方の文字列が等しい場合は、 Trueを返します。 それ以外の場合False

# simple lambda function to check whether two strings are anagrams or not
are_anagrams = lambda x, y: str(sorted(x.lower())) == str(sorted(y.lower()))
# calling the function
print(are_anagrams('cat', 'tac'))
print(are_anagrams('cat', 'Tac'))
print(are_anagrams('cat', 'dog'))

出力

上記のコードを実行すると、次の結果が得られます。

True
True
False

これで、2つの文字列がアナグラムであるかどうかを確認する方法がわかりました。しかし、それだけでは問題を解決できません。リストのすべてのアナグラムをサブリストとしてグループ化(保存)する必要があります。

どうすれば問題を解決できますか?

辞書を使用して要素をグループ化することをお勧めします。関連するアナグラム用の単一のキーがあります。 Pythonを初めて使用する場合は、少し混乱します。私たちが望むことを達成するためのステップを見てみましょう。

  • 文字列のリストを初期化します。
  • 空の辞書を初期化します。
  • リストを繰り返し処理します。
    • 文字列を並べ替えます。
    • 辞書にあるかどうかを確認します。

      • 辞書にある場合は、その文字列をリストに追加します。
    • それ以外の場合は、アナグラムを保存するための現在の文字列を含むリストでキーを初期化します。
  • 辞書のすべての値をリストに出力します。

# initialzing a list of strings
anagrams = ['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']
# initializing an empty dict
grouped_anagrams = {}
# iterating over the list to group all anagrams
for string in anagrams:
   # sorting the string
   sorted_string = str(sorted(string))
   # checking the string in dict
   if sorted_string in grouped_anagrams:
      # adding the string to the group anagrams
      grouped_anagrams[sorted_string].append(string)
      else:
         # initializing a list with current string
         grouped_anagrams[sorted_string] = [string]
# printing the values of the dict (anagram groups)
print(list(grouped_anagrams.values()))

出力

上記のコードを実行すると、次の結果が得られます。

[['dog', 'god'], ['pat', 'tap'], ['cat', 'tac'], ['fired', 'fried']]

結論

さまざまなアプローチを使用して問題を解決することもできます。 defaultdictというデータ構造があります これは、辞書でキーをチェックすることを回避するのに役立ちます。探索して、それに応じてコードを変更できます。

チュートリアルで疑問がある場合は、コメントセクションでそれらについて言及してください。


  1. 与えられたPythonリストからのバイグラム形成

    バイグラムは、特定の文の2つの連続する単語ごとに1組の単語を作成することによって形成されます。 Pythonでは、この手法はテキスト分析で頻繁に使用されます。以下に、これを実現する方法に関する2つのアプローチを示します。 列挙と分割の使用 これらの2つの方法を使用して、最初に文を複数の単語に分割し、次に列挙関数を使用して、連続する単語から単語のペアを作成します。 例 list = ['Stop. look left right. go'] print ("The given list is : \n" + str(list)) # Using enumer

  2. Pythonでのグループアナグラム

    文字列のセットがあるとします。アナグラムをグループ化する必要があります。したがって、[eat、 tea、 tan、 ate、 nat、 bat]の場合、グループは[[ate、 eat、 tea]、[ nat 、 tan ]、[ bat ]] これを解決するには、次の手順に従います- 解像度をマップとして定義 文字列配列のfori x:=xと結合、ソートされたiの文字列 結果のxの場合 結果にiを挿入[x] その他の結果[x]:=[i] resの値をリストとして返す 例(Python) 理解を深めるために、次の実装を見てみましょう- class Solution: