이번 포스트에서는 파이썬의 itertools 내장 모듈에 대해 알아보려고 합니다. itertools는 효율적인 반복을 위한 반복기 빌딩 블록을 generator를 이용한 iterator 형태로 구성하여 빠르고 효율적으로 메모리를 사용할 수 있습니다. itertools 모듈의 자주 쓰이고 중요한 메소드에 대해 알아보겠습니다.
무한 이터레이터
무한으로 반복할 수 있는 메소드입니다. 보통 여기에 속하는 메소드들은 종료 조건을 파라미터로 따로 명시합니다.
count(start=0, step=0)
끝나는 지점이 정해지지 않은 range 라 생각하면 편합니다. start와 step만 인수로 주어지기 때문에, 길이가 정해진 다른 리스트와 보통 같이 사용합니다.
cycle()
주어진 인자에서 요소를 반환하면서 요소의 사본을 만들어 무한히 반복합니다.
repeat(object, times=None)
object를 주어진 times만큼 반복합니다. times 인자를 따로 지정하지 않을 경우 무한히 반복합니다. 이 특성을 이용해서 zip이나 map에 상수 스트림을 반복적으로 제공하는 데 사용됩니다.
유한 이터레이터
유한 이터레이터에 속하는 메소드들은 내재적으로 종료 조건을 가질 수도 있고, 사용시 입력으로 넣을 iterator의 크기가 유한한 경우에 해당합니다.
chain(*iterables)
인자로는 반복가능한 객체 (string, 리스트 등)가 여러개 들어가고 chain 메소드는 이 여러 시퀀스를 하나의 시퀀스로 만들어주는 역할을 합니다. itertools의 메소드는 iterator를 반환하므로 앞에 list를 붙여 주어야 리스트 형태로 볼 수 있습니다.
islice(iterable, stop)
iterable에서 선택된 요소를 반환합니다. islice(iterable, start, stop, step=None)의 형태도 가능합니다. slice 내장 함수와 동일하게 동작합니다.
zip_longest(*iterable, fiilvalue=None)
zip 내장 함수를 수행하나 zip은 짧은 iterable에 맞추는 반면 zip_longest는 가장 긴 iterable에 초점을 맞춥니다. fillvalue 인자에 값을 집어넣으면 짧은 iterable 인자가 빌 때, 값을 특정 값으로 채울 수 있습니다.
조합형 이터레이터
조합형 이터레이터에 속하는 메소드들은 여러 iterable 인자를 받아 그것을 조합한 iterator를 return합니다. 순열, 조합 등이 포함됩니다.
permutations(iterable, r=None)
순열 iterator를 반환합니다. 이때, r이 지정되지 않았다면 iterable의 길이의 순열을 return합니다. r이 정해졌다면 정한 값 길이만큼의 모든 순열 조합을 return합니다.
product(*iterable, repeat=1)
입력으로 들어온 iterable들의 데카르트 곱의 iterator를 반환합니다. iterable 자기 자신과의 데카르트 곱을 계산하려면 repeat인자를 변경하면 됩니다.
combinations(iterable, r)
조합의 iterator를 반환합니다. 반환 시에는 입력 iterable 의 순서에 따라 사전식으로 반환되며 입력이 정렬되어 있을 경우 반환 값도 정렬됩니다. 순열과 달리 r을 무조건 정해주어야 합니다. (지정하지 않았을 경우 TypeError 발생)
combinations_with_replacement(iterable, r)
입력 iterable에서 r 길이의 조합 튜플의 리스트를 return 하는데 개별 요소를 두 번 이상 반복할 수 있습니다.
홍머스 정리
- itertools 메소드는 iterator를 반환. 따라서 list를 따로 씌우거나 for문을 통해 값을 볼 수 있음.
참조
'Computer > Python' 카테고리의 다른 글
Mutable Default Arguments (0) | 2021.04.29 |
---|---|
Pycharm 설치 (0) | 2021.04.28 |
collections 모듈 (5) - deque (0) | 2021.02.28 |
collections 모듈 (4) - defaultdict (0) | 2021.02.28 |
collections 모듈 (3) - OrderedDict (0) | 2021.02.27 |