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