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

Pythonの組み込み関数permutations()を使って文字列の順列を求める方法

このチュートリアルでは、Pythonの標準ライブラリitertoolsモジュールに含まれる組み込み関数permutations()を使って、文字列の順列(並べ替え)を求める方法を解説します。

順列とは、与えられた文字をすべて使い、順序を変えて並べた組み合わせのことです。例えば「XYZ」という3文字の場合、3! = 6通りの並べ方が存在します。

文字列の順列を求める手順

  • itertoolsモジュールをインポートする
  • 対象となる文字列を用意する
  • itertools.permutations()メソッドで文字列の順列を取得する
  • 戻り値はイテレータオブジェクトなので、list()でリストに変換する
    • リストには、タプル形式の順列が格納されます

サンプルコード

実際のプログラムを見てみましょう。

## モジュールをインポート
import itertools

## 文字列を初期化
string = "XYZ"

## itertools.permutationsメソッドで順列を取得
permutation_list = list(itertools.permutations(string))

## タプル形式の順列をそのまま表示
print("-----------Permutations Of String In Tuples----------------")
print(permutation_list)

## 'join'メソッドでタプルを文字列に変換して表示
print("-------------Permutations In String Format-----------------")
for tup in permutation_list:
    print("".join(tup))

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

-----------Permutations Of String In Tuples----------------
[('X', 'Y', 'Z'), ('X', 'Z', 'Y'), ('Y', 'X', 'Z'), ('Y', 'Z', 'X'), ('Z', 'X', 'Y'), ('Z', 'Y', 'X')]
-------------Permutations In String Format-----------------
XYZ
XZY
YXZ
YZX
ZXY
ZYX

補足:順列の個数について

文字数がnの場合、順列の総数はn!(階乗)になります。例えば3文字なら3! = 6通り、4文字なら4! = 24通りです。文字数が増えると順列の数は爆発的に増加するため、長い文字列を扱う際にはパフォーマンスへの注意が必要です。

また、重複した文字を含む文字列で同じ並びを除外したい場合は、結果をset()で囲むことで重複を簡単に除去できます。

プログラムについてご不明な点がありましたら、ぜひコメント欄でお知らせください。

  1. 指定された文字列が母音回文であるかどうかを確認するPythonプログラム

    はじめに この記事では、「与えられた文字列から子音をすべて取り除いたとき、残った母音だけの文字列が回文になっているかどうかを判定する」という問題を、Pythonプログラムで解く方法を解説します。 問題の概要 問題文:母音と子音の両方を含む文字列が与えられます。まず文字列からすべての子音を取り除き、その結果得られた文字列が回文(前から読んでも後ろから読んでも同じ並びになる文字列)であるかどうかを確認してください。 解決のアプローチ この問題は、以下の手順で解くことができます。 元の文字列を先頭から順に走査し、母音(a・e・i・o・u)だけを取り出して新しい文字列を作成します。 母音が1つも

  2. Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法

    本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列