🐍Python | Django

[Python] itertools

이줭 2022. 5. 26. 17:40
728x90

itertools란 효율적인 루핑을 위한 이터레이터를 만드는 라이브러리로 여러가지 함수들이 많이 있지만, 그 중 combinations(), combinations_with_replacement(), product(), permutations()에 대해 알아보자.

 

- combinations(iterable, r)

combinations는 iterable에서 원소의 개수가 r개인 조합을 뽑는 함수이다. 아래와 같이 사용할 수 있다.

from itertools import combinations

n_list = [1, 2, 3]

print(combinations(n_list, 2))

'''
[(1, 2), (1, 3), (2, 3)]
'''

- combinations_with_replacement(iterable, r)

combinations_with_replacement는 iterable에서 원소의 개수가 r개인 중복 조합을 뽑는 함수이다.

from itertools import combinations_with_replacement

n_list = [1, 2, 3]

print(combinations_with_replacement(n_list, 2))

'''
[(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]
'''

- permutations(iterable, r=None)

permutations는 iterable에서 원소의 개수가 r개인 순열을 뽑는 함수이다.

만약 r을 지정하지 않거나 None으로 지정하면 최대 길이의 순열이 리턴된다.

from itertools import permutations

s_list = ['A', 'B', 'C']

print(list(permutations(s_list)))

'''
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), 
	('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
'''

- product(*iterables, repeat=1)

여러 iterable의 데카르트곱을 리턴하는 함수로, product는 다른 함수들과 달리 여러 iterable을 넣어줄 수 있고 iterable간의 모든 짝을 지어 리턴한다. repeat은 반복횟수인데, repeat의 사용법은 코드를 보며 알아보자.

from itertools import product

s_list = ['A', 'B']
n_list = [1, 2]

print(list(product(s_list, n_list, repeat=1)))

'''
[('A', 1), ('A', 2), ('B', 1), ('B', 2)]
'''

# repeat=3의 의미는 product(s_list, s_list, s_list, repeat=1)과 같다.
print(list(product(s_list, repeat=3))) 

'''
[('A', 'A', 'A'), ('A', 'A', 'B'), ('A', 'B', 'A'),
('A', 'B', 'B'), ('B', 'A', 'A'), ('B', 'A', 'B'),
('B', 'B', 'A'), ('B', 'B', 'B')]
'''

 

 

참고 : https://docs.python.org/ko/3/library/itertools.html

728x90

'🐍Python | Django' 카테고리의 다른 글

[Python] heapq  (0) 2022.06.03
[Python] zip()  (0) 2022.05.30
[Python] enumerate()  (0) 2022.05.25
[Python] Exception 추적  (0) 2022.05.23
[Python] Duck Typing?  (0) 2022.05.22