간단한 작업들은 if/ for 조건문을 과 List, Dict 객체만 잘 조합하면 구성이 가능하다. 하지만 대용량의 데이터 분석 작업을 진행할수록 class, __init__, lambda 등의 내용을 사용하면 보다 효과적인 처리가 가능합니다.
1 기본 Method
itertools.chain(객체1, 객체2, 객체3)
여러 객체를 1개로 묶는다
import itertools
tters = ['a', 'b', 'c', 'd', 'e', 'f']
booleans = [1, 0, 1, 0, 0, 1]
decimals = [0.1, 0.7, 0.4, 0.5]
list(itertools.chain(letters, booleans, decimals))
[Out]>> ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1, 0.1, 0.7, 0.4, 0.5]
itertools.count(시작값, Step)
Key, Value 를 묶어서 { dict } 객체를 생성합니다
from itertools import count
for number, letter in zip(count(0, 10), ['a', 'b', 'c', 'd', 'e']):
print ('{0}: {1}'.format(number, letter))
[Out]>> 0: a; 10: b; 20: c; 30: d; 40: e
2 Python 기본 함수를 활용
zip()
객체를 튜플(tuple)로 묶는다
list(zip([1, 2, 3], ['a', 'b', 'c']))
[Out]>> [(1, 'a'), (2, 'b'), (3, 'c')]
map()
개별 인덱스 값을 lambda 함수로 묶은 뒤 list() 객체를 생성합니다
list(map(lambda x: x * x, range(10)))
[Out]>> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
filter()
전체 인덱스 값 중 lambda 조건에 True 를 출력합니다
list(filter(lambda x: x < 10, [1, 4, 6, 7, 11, 34, 66, 100, 1]))
[Out]>> [1, 4, 6, 7, 1]
3 itertools 계산 함수들
tee()
동일한 객체의 복사본을 생성하고, 이는 출력 후 바로 메모리에서 지운다.
from itertools import tee
i1, i2, i3 = tee(range(10), 3)
print (i1) # <itertools.tee object at 0x2a1fc68>
print (list(i1)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print (tuple(i1)) # []
print (list(i2)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print (list(i2)) # []
print (tuple(i3)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print (list(i3)) # []
cycle()
0, 1 2개 인덱스 값을 사용하여 객체를 출력한다
from itertools import cycle
for number, letter in zip( cycle (range(2)), ['a', 'b', 'c', 'd', 'e'] ):
print ('{0}: {1}'.format(number, letter))
>> 0: a; 1: b; 0: c; 1: d; 0: e
repeat()
value 값을 반복 출력한다
from itertools import repeat
print(list(repeat('Hello, world!', 3)))
[Out]>> ['Hello, world!', 'Hello, world!', 'Hello, world!']
dropwhile()
Whlie 반복문에서, lambda 조건값은 Drop 하고 나머지를 출력 한다
ex) 11에서 Drop을 멈추고 나머지를 출력
from itertools import dropwhile
list(dropwhile(lambda x: x < 10, [1, 4, 6, 7, 11, 7, 66, 100, 1, 22]))
[Out]>> [11, 7, 66, 100, 1, 22]
takewhile()
Whlie 반복문에서 lambda 조건값을 출력 하고, 나머지를 Drop 한다
ex) 11에서 출력을 멈춘다
from itertools import takewhile
list(takewhile(lambda x: x < 10, [1, 4, 6, 7, 11, 34, 66, 100, 1]))
[Out]>> [1, 4, 6, 7]
4 itertools 를 활용한 복잡한 예제
from collections import defaultdict
counts = defaultdict(list)
attempts = [('dan', 87), ('erik', 95),
('jason', 79), ('erik', 97), ('dan', 100)]
for (name, score) in attempts:
counts[name].append(score)
counts
[Out]>> defaultdict(list, {'dan': [87, 100], 'erik': [95, 97], 'jason': [79]})