[解決済み] Pythonで与えられた文字列のすべての可能な並べ換えを見つける
質問
ある文字列がある。その文字列の中の文字の順番を変えて、その文字列からすべての順列を生成したい。例えば、次のようにします。
x='stack'
のようなリストが欲しいのです。
l=['stack','satck','sackt'.......]
現在、私は文字列のリストキャストを繰り返し、ランダムに2文字を選び、それらを転置して新しい文字列を形成し、それをlのセットキャストに追加しています。文字列の長さに基づき、可能な順列の数を計算し、セットのサイズが限界になるまで繰り返し処理を続けています。 これを行うためのより良い方法があるはずです。
どのように解決するのですか?
itertoolsモジュールには、permutations()という便利なメソッドがあります。 ドキュメント にはこう書かれています。
itertools.permutations(iterable[, r])
反復可能の要素の連続したr個の長さの並べ換えを返す。
rが指定されないか、またはNoneの場合、rはデフォルトで になり、すべての可能な並べ換えが生成されます。
並べ換えは辞書式ソート順で生成されます。したがって、もし入力 順で生成される。 の順で生成されます。
並べ替えられた文字を文字列として結合しなければなりませんが。
>>> from itertools import permutations
>>> perms = [''.join(p) for p in permutations('stack')]
>>> 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', 'actk', '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'] です。
重複に悩まされる場合は、データを
set
:
>>> perms = [''.join(p) for p in permutations('stacks')]
>>> len(perms)
720
>>> len(set(perms))
360
これは伝統的に型キャストと考えられているものではなく、どちらかというと
set()
コンストラクタの呼び出しであるということです。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonで文字列を反転させる
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み] JavaScript の文字列をすべて小文字に変換する
-
[解決済み] リストのすべての並べ換えを生成するには?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。