ホームページ >バックエンド開発 >Python チュートリアル >重複の処理を含め、Python で文字列の可能なすべての順列を生成するにはどうすればよいですか?

重複の処理を含め、Python で文字列の可能なすべての順列を生成するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 04:16:301009ブラウズ

How can I generate all possible permutations of a string in Python, including handling duplicates?

Python での文字列の並べ替え

指定された文字列の考えられるすべての並べ替えを見つけるのは、困難な作業になる場合があります。ただし、Python では itertools モジュールを使用した簡単な解決策が提供されます。

解決策: itertools.permutations()

itertools.permutations() メソッドは、順列を生成するために特別に設計されています。 。これは反復可能を入力として受け取り、反復可能のすべての可能な順列を反復するジェネレーター オブジェクトを返します。

文字列の場合は、list() 関数を使用して反復可能に変換できます。文字列の考えられるすべての順列を取得するには、次のコードを使用します。

<code class="python">from itertools import permutations
string = 'stack'
perms = [''.join(p) for p in permutations(list(string))]</code>

結果は、元の文字列のすべての順列を含む文字列のリストになります。

処理重複

重複した順列を除外したい場合は、一意の要素のみを保持するセットを利用できます。

<code class="python">perms = set([''.join(p) for p in permutations(list(string))])</code>

itertools.permutations()

  • 効率的: このメソッドは C ベースの実装を利用して迅速に実行します。
  • 包括的: 可能な順列をすべて繰り返しずに生成します。
  • カスタマイズ可能:順列の数は、'r' パラメーターを指定することで制御できます。

出力例

文字列 'stack' の場合、出力リストには次のものが含まれます。次の順列:

['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta', 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']

以上が重複の処理を含め、Python で文字列の可能なすべての順列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。