파이썬 표준 라이브러리 Itertools 사용하기 (2)¶
import itertools as it
3. iterable 객체의 길이만큼 연산하는 iterator¶
적당한 번역이 떠오르지 않아서 의역했음
공식 문서에는 "Iterators terminating on the shortest input sequence" 라는 카테고리로 분류되어 있다.
이 카테고리의 메소드들은 iterable 객체를 순서대로 한 번만 순회하면서 결과를 출력한다.
it.accumulate(iterable, func=operator.add, initial=None)
iterable 개체의 첫번째 원소부터 함수를 누적해서 적용해 결과값을 출력한다.func
인자로 적용할 함수를 전달하는데, 입력하지 않으면 누적합이 기본으로 적용된다.
기본으로 적용된 함수 operator.add
는 마치 opeartor 라이브러리에서 가져온 두 값을 더하는 함수와 add 처럼 기능하기 때문에 이렇게 표현했다고 공식 itertools 문서에서 설명하고 있다. (정말로 그 operator.add
가 적용되는 것은 아님. 참고 - https://docs.python.org/3.8/library/itertools.html#itertool-functions)func
으로는 인자값을 두 개 전달 받는 함수만 가능하다.min
, max
같은 파이썬 기본 내장함수 뿐만 아니라, 사용자 정의 함수, 람다 함수, operator 라이브러리에서 가져온 함수도 가능하다.
(operator 라이브러리를 불러와서 적용 가능한 함수 목록 - https://docs.python.org/3.8/library/operator.html)initial
인자는 입력할 시 첫번째 원소와 계산해줄 값을 전달한다.
x = [2, 3, 5, 7, 11, 13]
for i in it.accumulate(x) :
print(i, end=" ")
2 5 10 17 28 41
# 10부터 누적합 적용
x = [2, 3, 5, 7, 11, 13]
for i in it.accumulate(x, initial = 10) :
print(i, end=" ")
10 12 15 20 27 38 51
# 최소값 출력
x = [10, 4, 6, 7, 3]
for i in it.accumulate(x, min) :
print(i, end=" ")
10 4 4 4 3
# operator 라이브러리 불러와서 누적곱 적용
import operator
x = [2, 3, 5, 7, 11, 13]
for i in it.accumulate(x, operator.mul) :
print(i, end=" ")
2 6 30 210 2310 30030
it.chain(iterable1, iterable2, ...)
iterable 객체 여럿을 전달받아 하나씩 분리한다.
x = "ABCD"
y = [0, 1, 2]
z = [[1, 2], -10, 20]
for i in it.chain(x, y, z) :
print(i, end= " ")
A B C D 0 1 2 [1, 2] -10 20
itertools.compress(data=iterable1, selectors=iterable2)
data의 원소들 중 순서대로 selectors 원소가 True인 것만 걸러낸다.
# 1에 매칭되는 A, D, F 출력
x = 'ABCDEF'
check = [1, 0, 0, 1, 0, 1]
for i in it.compress(x, check) :
print(i, end=" ")
A D F
# 값이 1이 아니어도 True일 수 있음
x = 'ABCDEF'
check = [1, 0, 'a', -1, 0, 4]
for i in it.compress(x, check) :
print(i, end=" ")
A C D F
# selectors의 길이만큼만 연산
x = 'ABCDEF'
check = [1, 0, 0, 1]
for i in it.compress(x, check) :
print(i, end=" ")
A D
it.dropwhile(predicate, iterable)
predicate
으로 조건식을 전해주고, 조건식이 False가 되는 iterable의 원소부터 마지막까지 출력
# 4보다 작은 값인 2부터 끝까지 출력
x = [10, 4, 5, 7, 2, 9, 4]
for i in it.dropwhile(lambda a : a >= 4, x) :
print(i, end=" ")
2 9 4
it.filterfalse(predicate, iterable)
조건식이 False 인 원소들만 출력
# 0은 False로 인식하기 때문에 2의 배수만 출력
x = range(10)
for i in it.filterfalse(lambda x: x % 2, range(10)) :
print(i, end=" ")
0 2 4 6 8
'파이썬 팁' 카테고리의 다른 글
random 모듈 사용하기 (0) | 2023.01.03 |
---|---|
다차원 리스트 값 바꿀 때 여러 줄이 같이 바뀐다면 (0) | 2022.12.09 |
파이썬 표준 라이브러리 itertools 사용하기 (1) (0) | 2022.12.05 |
dict 자료형 정렬하기 (0) | 2022.12.05 |
list.sort()와 sorted()의 차이, key 인자 활용 (0) | 2022.12.04 |
댓글