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

Pythonで数値の数字にマップされた文字から形成されたすべての文字列を検索します


次のような文字マッピングがあるとします。ここでは、1から9までの各桁が、いくつかの文字にマップされます。

1 -> ['A', 'B', 'C']
2 -> ['D', 'E', 'F']
3 -> ['G', 'H', 'I']
4 -> ['J', 'K', 'L']
5 -> ['M', 'N', 'O']
6 -> ['P', 'Q', 'R']
7 -> ['S', 'T', 'U']
8 -> ['V', 'W', 'X']
9 -> ['Y', 'Z']

数字がある場合は、指定されたマッピングリストの対応する文字で数字を変更し、生成されたすべての文字列を表示する必要があります。数字に数字が現れるたびに同じ文字を考慮する必要があります。指定された番号には0は含まれません。

したがって、入力が[4,3,5]の場合、出力は

になります。
JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO

これを解決するには、次の手順に従います-

  • out:=新しいリスト
  • temp:=新しいリスト
  • char_map:=新しいマップ
  • インデックス:=0
  • inpの各桁について、
    • 数字がchar_mapにない場合は、
      • char_map [digit]:=index
    • 一時リストをクリアする
    • 範囲0からテーブルのサイズ[数字-1]のiの場合、実行
      • インデックスが0と同じ場合、
        • s:=table [digit-1、i]
        • 出力の最後にsを挿入
      • インデックス>0の場合、
        • 入力する文字列ごとに、実行します
          • s:=table [digit-1、i]
            • char_map [digit]がindexと同じでない場合、
              • s:=string [char_map [digit]]
            • string:=string concatenate s
            • tempの最後に文字列を挿入
        • char_map [digit]がindexと同じでない場合、
          • 休憩
      • インデックス>0の場合、
        • out:=tempのコピー
      • index:=index + 1
    • 戻る

理解を深めるために、次の実装を見てみましょう-

def findCombinations(inp, table):
   out = list()
   temp = list()
   char_map = dict()
   index = 0
   for digit in inp:
      if digit not in char_map:
         char_map[digit] = index
      temp.clear()
      for i in range(len(table[digit - 1])):
         if index == 0:
            s = table[digit - 1][i]
            out.append(s)
         if index > 0:
            for string in out:
               s = table[digit - 1][i]
               if char_map[digit] != index:
                  s = string[char_map[digit]]
               string = string + s
               temp.append(string)
            if char_map[digit] != index:
               break
      if index > 0:
         out = temp.copy()
      index += 1
   return out
mapping = [['A', 'B', 'C'],
         ['D', 'E', 'F'],
         ['G', 'H', 'I'],
         ['J', 'K', 'L'],
         ['M', 'N', 'O'],
         ['P', 'Q', 'R'],
         ['S', 'T', 'U'],
         ['V', 'W', 'X'],
         ['Y', 'Z']]
inp = [4,3,5]
res = findCombinations(inp, mapping)
for it in res:
   print(it, end=" ")

入力

[4,3,5]

出力

JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO

  1. 2つの文字列から珍しい単語を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの文字列が与えられているので、与えられた文字列から珍しい単語を取得する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # uncommon words def find(A, B):    # count    count = {}    # insert in A    for word in A.split():       count[word] = coun

  2. Pythonで文字列から数字以外の文字を削除するにはどうすればよいですか?

    これを実現するには、さまざまな方法があります。 for ... ifステートメントを使用して、数字以外の文字を除外できます。例: >>> s = "H3ll0 P30P13" >>> ''.join(i for i in s if i.isdigit()) '303013' filterとlambda関数を使用して、文字をフィルターで除外することもできます。例: >>> s = "H3ll0 P30P13" >>> filter(lambda x: