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]