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

Pythonでセットのすべての順列を生成しますか?


数学では、集合のすべてのメンバーをある順序または順序に並べ、集合がすでに順序付けられている場合は、その要素を並べ替える(並べ替える)ことを順列と呼びます。さまざまな手法を使用して順列を生成できます。以下はその一部です

方法1

Pythonには、itertoolsと呼ばれる順列と組み合わせ専用のモジュールが付属しています。

最初にモジュールをインポートします

>>> import itertools
>>>

順列関数を使用すると、順序が重要なリスト内のN個の値の順列を取得できます。たとえば、[1,2,3,4]を使用したN =2の値の選択は、次のように行われます-

Permutation (order matters):
>>> print(list(itertools.permutations([1,2,3,4],2)))
[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]

組み合わせ(順序は関係ありません)

>>> print(list(itertools.combinations('1234', 2)))
[('1', '2'), ('1', '3'), ('1', '4'), ('2', '3'), ('2', '4'), ('3', '4')]

方法2

以下は、新しい中間リストを作成せずにリストに実装したものです。

def permute(xs, low=0):
if low + 1 >= len(xs):
yield xs
else:
for p in permute(xs, low + 1):
yield p
for i in range(low + 1, len(xs)):
xs[low], xs[i] = xs[i], xs[low]
for p in permute(xs, low + 1):
yield p
xs[low], xs[i] = xs[i], xs[low]
for p in permute([1, 2, 3]):
print (p)

出力

[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]

再帰を使用する方法3

import copy
def perm(prefix,rest):
for e in rest:
new_rest=copy.copy(rest)
new_prefix=copy.copy(prefix)
new_prefix.append(e)
new_rest.remove(e)
if len(new_rest) == 0:
print (new_prefix + new_rest)
continue
perm(new_prefix,new_rest)
perm([],[1, 2, 3])

出力

[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]

  1. Pythonでリストのすべての順列を生成するにはどうすればよいですか?

    itertoolsパッケージの順列メソッドを使用して、Pythonでリストのすべての順列を検索できます。次のように使用できます- 例 import itertools perms = list(itertools.permutations([1, 2, 3])) print(perms) 出力 これにより、出力が得られます- [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

  2. Pythonセット

    Pythonセットは、順序付けされていないを含むコレクションタイプです。 ユニークのコレクション および不変 オブジェクト。つまり、Pythonセットは重複するアイテムを保持できず、セットが作成されると、アイテムを変更することはできません。 注:セットのアイテムは不変です。つまり、アイテムを変更することはできません。ただし、セット自体は変更可能です。つまり、セットにアイテムを追加したり、セットからアイテムを削除したりできます。 順序は維持されません。たとえば、同じセットを印刷するたびに、アイテムの順序が異なる場合があります。 Pythonでは、セットは中括弧{}を使用して構築されます セッ