#### 순열
# 순열이란 n개의 원소를 사용해서 순서를 정하여 r개의 배열로 나타내는 것을 말한다. 
# 순열은 순서가 있기 때문에 원소의 종류가 같아도 순서가 다르면 다른배열이 된다.

# 예를들어 [1,2,3] 이라는 리스트가 잇는데 이것을 2개의 배열로 나타내면 [(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)] 총 6가지가 된다. 
# 여기서 원소의 종류가 같은 것이 총 3가지가 있다.
#  [(1,2),(2,1)] , [(1,3),(3,1)],[(2,3),(3,2)] 이렇게 원소의 종류가 같아도 순서가 다르기 때문에 다른 배열이 된다.

from itertools import permutations
a = [1,2,3]
permute = permutations(a,2)
print(list(permute))
# [(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)]

# 조합
# 조합이란 n개의 원소를 사용해서 순서의 관계없이 r개의 배열로 나타내는 것을 말한다. 
# 조합은 순서가 없어서 원소의 종류가 같으면 같은 배열로 나타낸다.

# 예를들어 [1,2,3] 이라는 리스트가 잇는데 이것을 2개의 배열로 나타내면 [(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)] 총 6가지가 된다. 
# 여기서 원소의 종류가 같은 것이 총 3가지가 있다. [(1,2),(2,1)] , [(1,3),(3,1)],[(2,3),(3,2)] 
# 원소의 종류가 같기 때문에 3가지의 원소는 같은 배열이 되서 [(1,2),(1,3),(2,3)] 총 3가지의 조합이 만들어진다.

from itertools import combinations
a = [1,2,3]
combi = combinations(a,2)
    
print(list(combi)) 
# [(1,2),(1,3),(2,3)]