Python でリストのすべての順列を生成する方法

  1. Python でリストのすべての順列を生成するには itertools.permutations を使う
  2. Python でリストのすべての順列を生成するために再帰を使用する

このチュートリアルでは、Python でリストのすべての順列を生成する方法について説明します。

Python でリストのすべての順列を生成するには itertools.permutations を使う

Python は、パーミュテーションを生成するための標準的なライブラリツールを提供しています:itertools.permutation。以下の例は、これを使ってリストのすべての順列を生成する方法を示しています。

import itertools
inp_list = [4, 5, 6]
permutations = list(itertools.permutations(inp_list))
print(permutations)

出力:

[(4, 5, 6), (4, 6, 5), (5, 4, 6), (5, 6, 4), (6, 4, 5), (6, 5, 4)]

パーミュテーションのデフォルトの長さは、入力リストの長さに設定されています。しかし、itertools.permutations 関数呼び出しで並べ替えの長さを指定することができます。以下の例はこれを示しています。

import itertools
inp_list = [1, 2, 3]
permutations = list(itertools.permutations(inp_list, r=2))
print(permutations)

出力:

[(4, 5), (4, 6), (5, 4), (5, 6), (6, 4), (6, 5)]

以下の例は、与えられたリストのすべての可能な長さの順列を生成する方法を示しています。

import itertools
inp_list = [1, 2, 3]
permutations = []
for i in range(1,len(inp_list)+1):
    permutations.extend(list(itertools.permutations(inp_list, r=i)))
print(permutations)

出力:

[(4,), (5,), (6,), (4, 5), (4, 6), (5, 4), (5, 6), (6, 4), (6, 5), (4, 5, 6), (4, 6, 5), (5, 4, 6), (5, 6, 4), (6, 4, 5), (6, 5, 4)]

Python でリストのすべての順列を生成するために再帰を使用する

Python では、リストのすべての順列を生成するために再帰を使用することもできます。以下の例はこれを示しています。

def permutations(start, end=[]):
    if len(start) == 0:
        print(end)
    else:
        for i in range(len(start)):
            permutations(start[:i] + start[i+1:], end + start[i:i+1])
            
permutations([4,5,6])

出力:

[4, 5, 6]
[4, 6, 5]
[5, 4, 6]
[5, 6, 4]
[6, 4, 5]
[6, 5, 4]

関連記事 - Python List

  • Python で特定のサイズのリストを作成する方法
  • リストメソッドの追加と拡張の違いは何ですか
  • comments powered by Disqus