プログラミンコンテストでは、順列に関する出題が多々あります。ここでは、その順列を列挙する方法を紹介します。

順列とは?

 はじめに、“順列”について確認します。順列とは、「異なる n 個の中から r 個を取り出して1列に並べたもの」です。そして順列は、並べる順番を考慮することに“組合せ”との違いがあります。

python3での実装例

 それでは実際に、python3で実装してみます。

import itertools

mylist = [1, 2, 3]

print(list(itertools.permutations(mylist)))
# --> [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

print(list(itertools.permutations(mylist,2)))
# --> [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

 1行目で “itetoolsモジュール”をimportしています。これにより、簡単に順列を生成できるようになります。今回は3つの要素(1, 2, 3)を持つ “mylist” を元に順列を生成しています。

 5行目の itertools.permutations(mylist) が順列を生成している部分です。またそれを list( ) としていますが、これがなければ表示は <itertools.permutations object at 0x7fcba139b468> といった感じで表示されます。

 さらに8行目では、5行目の命令に引数をもう一つ、2 として与えています。これにより、生成される順列の長さが 2つ になっています。引数がなければ生成される順列の長さは、元の配列の長さと同じになる訳です。
 

 最後に、生成される順列はタプルで返されている点に注意して下さい。