特に重複を避ける必要がある場合、Python で文字列のすべての順列を効率的に見つけるにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-27 08:16:03
オリジナル
959 人が閲覧しました

How can I efficiently find all permutations of a string in Python, especially if I need to avoid duplicates?

Python で指定された文字列のすべての順列を見つける [重複]

Python では、指定された文字列の可能なすべての順列を見つけることが困難になります。 1 つのアプローチでは、文字のリストを反復処理し、ペアをランダムに転置して新しい文字列を生成します。ただし、このアプローチには限界があります。

itertools モジュールを使用した最適な解決策

より効率的な解決策は、permutations() メソッドを提供する itertools モジュールにあります。このメソッドは、反復可能な要素の連続する順列を返します。引数が指定されていない場合、メソッドはデフォルトで辞書編集順にすべての完全長の順列を生成します。

<code class="python">import itertools

x = 'stack'
perms = [''.join(p) for p in permutations(x)]</code>
ログイン後にコピー

このコードは、次のように、「スタック」内の文字のすべての可能な順列を含む文字列のリストを生成します。以下:

perms = ['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']
ログイン後にコピー

重複が見つかった場合は、セットを使用してそれらを削除することを検討してください:

<code class="python">x = 'stack'
perms = set([''.join(p) for p in permutations(x)])</code>
ログイン後にコピー

以上が特に重複を避ける必要がある場合、Python で文字列のすべての順列を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!