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

文字列のサイズrのすべての順列を取得するPythonプログラム


文字列sと数値rがあるとします。 sのr文字数のすべての順列を表示する必要があります。すべての順列を取得するpermutations()関数があります。この関数はitertoolsライブラリ内にあります。

したがって、入力がs ="HELLO" r =3の場合、出力は

になります。
>['HEL', 'HEL', 'HEO', 'HLE', 'HLL', 'HLO', 'HLE', 'HLL', 'HLO', 'HOE', 'HOL', 'HOL', 'EHL', 'EHL', 'EHO', 'ELH', 'ELL',
'ELO', 'ELH', 'ELL','ELO', 'EOH', 'EOL', 'EOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE',
'LOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'OHE', 'OHL', 'OHL', 'OEH', 'OEL',
'OEL', 'OLH', 'OLE', 'OLL', 'OLH', 'OLE', 'OLL']

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

  • vals:=sからのサイズrのすべての順列のリスト
  • res:=新しいリスト
  • valsのxごとに、
    • 文字xのリストを文字列に変換し、resに挿入します
  • return res

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

from itertools import permutations
   def solve(s, r):
   vals=list(permutations(s,r))
   res=[]
   for x in vals:
      res.append(''.join(x))
   return res

s = "HELLO"
r = 3
print(solve(s, r))

入力

"HELLO", 2

出力

['HEL', 'HEL', 'HEO', 'HLE', 'HLL', 'HLO', 'HLE', 'HLL', 'HLO', 'HOE',
'HOL', 'HOL', 'EHL', 'EHL', 'EHO', 'ELH', 'ELL', 'ELO', 'ELH', 'ELL', 'ELO',
'EOH', 'EOL', 'EOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE',
'LLO', 'LOH', 'LOE', 'LOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH',
'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'OHE', 'OHL', 'OHL', 'OEH', 'OEL', 'OEL',
'OLH', 'OLE', 'OLL', 'OLH', 'OLE', 'OLL']

  1. 指定された文字列のすべての順列を出力するPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −文字列の可能なすべての順列を表示するために必要な文字列が与えられます。 次に、以下の実装のソリューションを見てみましょう- 例 # conversion def toString(List):    return ''.join(List) # permutations def permute(a, l, r):    if l == r:       print (toString(a))    e

  2. 文字列にすべての一意の文字が含まれているかどうかを確認するPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 sring入力が与えられた場合、文字列にすべての一意の文字が含まれているかどうかを確認する必要があります。 アプローチ ブール値の配列を作成します。ここで、インデックスiの変数フラグは、アルファベットの文字iが文字列に含まれているかどうかを示します。 この文字に2回目に遭遇したとき、文字列文字は一意ではなくなったため、すぐにfalseを返すことができます。 文字列の長さがアルファベットに表示される一意の文字数の値を超える場合も、falseを返すことができます。 文