목차
· itertool이란?
· 이터레이터(Iterator)타입
- Infinite iterators
▶ count(start, step)
▶ cycle(iterable
▶ repeat(value, num)
- Combinatoric iterators
▶ product()
▶ permutations()
▶ combinations()
▶ combinations_with_replacement()
- Terminating iterators
▶ accumulate(iter, func)
▶ chain(iter1, iter2)
▶ islice(iterable, start, stop, step)
itertool이란?
· 파이썬 3의 표준 라이브러리로, 더 복잡한 반복자를 생성하는 데 사용된다.
· 메모리 효육적이고, 정확한 코드를 만들 수 있도록 사용된다.
이터레이터(Iterator)타입
· itertools 모듈에는 다양한 타입의 iterator가 있다.
- Infinite iterators
- Combinatoric iterators
- Terminating iterators
Infinite Iterators
· 파이썬에서 for loop를 수행할 수 있는 모든 객체를 iterator라고 부른다.
ex) lists, tuples, set, dictionaries, strings
· 반복자는 무한할 수 있으며, 이러한 타입의 반복자를 무한 반복자(Infinite Iterators)라고 한다.
count(start, step)
· start 값 부터 무한대까지 출력한다.
· step 매개변수는 optional이고, step 값이 제공되면 반복할 때마다 해당 수 만큼 건너 뛴다.
import itertools
for i in itertools.count(10, 5):
if i == 50:
break
else:
print(i, end=" ")
cycle(iterable)
· 전달 받은 인수로 부터 모든 값을 순서대로 출력한다.
· 예시1
import itertools
temp = 0
for i in itertools.cycle("123"):
if temp > 7:
break
else:
print(i, end=' ')
temp = temp + 1
· 예시2 - next() 함수 사용
val = ['사과', '배', '수박']
iter = itertools.cycle(val)
for i in range(6):
print(next(iter), end=" ")
repeat(value, num)
· 무한한 시간 동안 전달된 값을 반복적으로 출력한다. num 매개변수는 optional이다.
import itertools
print(list(itertools.repeat(40, 5)))
Combinatoric iterators
· 순열, 조합, 데카르트 곱 같은 조합 구성을 단순화하는데 사용되는 재귀 생성기를 의미한다.
product()
· iterable 입력의 데카르트 곱을 계산하는 데 사용된다.
· repeat 키워드는 반복 횟수를 나타낸다.
· 정렬된 튜플 형식으로 출력을 반환한다.
from itertools import product
print(list(product([1, 2], repeat=2)))
print()
print(list(product(['사과', '배', '수박'], '5')))
print()
print(list(product('사과', [1, 2])))
print()
permutations()
· iterable의 가능한 모든 순열을 생성하는 데 사용된다.
· iterable, group_size 두 인수를 허용한다.
· group_size 값이 없거나 지정되지 않으면, group_size는 iterable의 길이로 바뀐다.
from itertools import permutations
print("주어진 리스트의 모든 순열 계산")
print(list(permutations([3, "Python"], 2)))
print()
print("주어진 문자열의 순열")
print(list(permutations('AB')))
print()
print("주어진 컨테이너의 순열")
print(list(permutations(range(3), 2)))
combinations()
· 지정된 그룹 크기의 인수로 전달된 컨테이너의 가능한 모든 조합(combinations)을 정렬된 순서로 출력한다.
from itertools import combinations
print("list를 정렬된 순서로 조합", list(combinations(['B', 3], 2)))
print()
print("문자열을 정렬된 순서로 조합", list(combinations("ab", 2)))
print()
print("list를 정렬된 순서로 조합", list(combinations(range(10), 1)))
combinations_with_replacement()
· 중복 조합을 출력한다.
· 두 개의 인수를 허용한다.
- 첫 번째 인수: r-length tuple
- 두 번째 인수: 반복수
· iterable의 요소에서 길이가 n인 부분 시퀸스를 반환하고 동일한 프로세스를 반복한다.
· 개별 요소는 반복될 수 있다.
from itertools import combinations_with_replacement
print("list를 정렬된 순서로 조합", list(combinations_with_replacement(['B', 3], 2)))
print()
print("문자열을 정렬된 순서로 조합", list(combinations_with_replacement("ab", 2)))
print()
print("list를 정렬된 순서로 조합", list(combinations_with_replacement(range(10), 1)))
Terminating iterators
· 짧은 입력 시퀸스에 대해 작업하고, 사용된 메서드의 기능을 기반으로 출력을 생성한다.
accumulate(iter, func)
· 누적된 합을 출력한다.
· 두 개의 인수를 갖는다.
- 첫 번째 인수: iterable
- 두 번째 인수: iterable에서 값이 반복될 때마다 뒤따를 함수
· 두 번째 인수로 함수가 정의 되어 있지 않으면, 기복적으로 덧셈이 발생한다.
· 출력 iterable은 입력 iterable에 따라 다르며, 입력 iterable에 값이 없으면 출력 iterable도 비어 있다.
import itertools
import operator
list1 = [1, 4, 5, 7, 9, 11]
# 요소들의 합 출력
print("The sum is : ", end="")
print(list(itertools.accumulate(list1)))
# 요소들의 곱 출력
print("The product is : ", end="")
print(list(itertools.accumulate(list1, operator.mul)))
chain(iter1, iter2)
· 체인 형태로 전달되고 인수로 선언된 iterable의 모든 값을 출력한다.
import itertools
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
list3 = [9, 10, 11, 12]
print(list(itertools.chain(list1, list2, list3)))
islice(iterable, start, stop, step)
· 주어진 iterable을 주어진 position에 따라 자른다.
· 각각 네 개의 인수를 허용하며 iterable, container, 시작 위치, 종료 위치, step(optional)을 의미한다.
import itertools
list1 = [12, 34, 65, 73, 80, 19, 20]
# 3 번째 인덱스 부터 시작하여 8 번째 인덱스 까지 2개씩 스킵하며 출력한다.
print(list(itertools.islice(list1, 2, 8, 2)))
TODO: starmap(func tuple list), dropwhile(func, seq), filterfalse(func, seq), takewhile(func, iterable), tee(iterator, count), zip_longest(iterable1, iterable2, fillval)
'파이썬' 카테고리의 다른 글
[Python] SyntaxError: Non-ASCII character '\xec' in file (0) | 2022.05.22 |
---|---|
[Python] @staticmethod, @classmethod - 정적메서드를 지원하는 방법 (0) | 2022.05.08 |
[Python] enumerate (0) | 2022.05.08 |
[Python] Iterable, Iterator, Generator (0) | 2022.05.08 |
[Python] HTTPX: 파이썬 HTTP 클라이언트 (0) | 2022.04.28 |
댓글