Python での文字列の順列
順列とは、再配置の順序を考慮せずに、特定の数の要素に対して一意の方法で可能な再配置の総数を意味します。
文字列は、私たちが知っているように、個々の文字のコレクションと考えることができます。
この記事では、特定の文字列に対して可能なすべての順列を見つけようとします。
Python で itertools.permutations()
関数を使用して文字列のすべての順列を返す
itertools
モジュールは、さまざまな反復可能なオブジェクトを作成して操作するために使用されます。このモジュールの permutations()
関数は、指定された値のセットに対して可能なすべての配置を返すことができます。
要素の可能な配置を含むタプルを含む itertools
タイプのオブジェクトを返します。リストを使用して、このオブジェクトの要素を表示できます。この関数は文字列でも使用できます。
例えば、
from itertools import permutations
lst = list(permutations("day"))
print(lst)
出力:
[('d', 'a', 'y'), ('d', 'y', 'a'), ('a', 'd', 'y'), ('a', 'y', 'd'), ('y', 'd', 'a'), ('y', 'a', 'd')]
文字の配置を含む出力で作成されたタプルに注意してください。join()関数とリスト内包法を使用して、これを文字列のリストに変更できます。
次のコードを参照してください。
from itertools import permutations
lst = ["".join(p) for p in permutations("day")]
print(lst)
出力:
['day', 'dya', 'ady', 'ayd', 'yda', 'yad']
join()
関数を使用してタプル要素を結合し、リストを反復処理することで各タプルにこれを使用します。
Python で文字列のすべての順列を返すユーザー定義関数を作成する
文字列のすべての順列を見つけるための簡単な関数を作成できます。再帰関数を作成します。このメソッドでは、文字列要素を 1 回交換し、新しい配置で関数を再度呼び出すだけです。最終的なアレンジを表示します。
上記のロジックを次のコードで実装します。
def string_permutations(s, i, n):
if i == n:
print("".join(s))
else:
for j in range(i, n):
s[i], s[j] = s[j], s[i]
string_permutations(s, i + 1, n)
s[i], s[j] = s[j], s[i]
a = "day"
x = len(a)
s = list(a)
print(permute(s, 0, x))
出力:
day
dya
ady
ayd
yad
yda
None
ご覧のとおり、再配置を実行する開始位置と終了位置が指定されています。文字列は、文字のリストとしても渡されます。可能なすべての順列を見つけるために、開始を 0 に設定し、終了を文字列の長さに設定します。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn