파이썬 표준 라이브러리 Itertools 사용하기 (1)¶
itertools를 사용하면 for문으로 힘겹게 낑낑거리던 작업을 손쉽게 해결할 수 있다.
In [1]:
import itertools as it
1. 무한 iterator 생성¶
it.count(start, step=1)
start 부터 step만큼 증가하는 수 무한히 생성. 기본 step = 1
In [2]:
for i in it.count(10) :
print(i, end=" ")
if i == 20 :
break
10 11 12 13 14 15 16 17 18 19 20
In [3]:
for i in it.count(10, 2) :
print(i, end=" ")
if i == 20 :
break
10 12 14 16 18 20
it.cycle(iterable)
순회가능한 객체를 순서대로 무한히 반복
In [4]:
cnt = 1
for i in it.cycle("abc") :
print(i, end=" ")
cnt += 1
if cnt == 10 :
break
a b c a b c a b c
In [5]:
cnt = 1
for i in it.cycle([1, 10, 100]) :
print(i, end=" ")
cnt += 1
if cnt == 10 :
break
1 10 100 1 10 100 1 10 100
it.repeat(element, n=None)
elment를 무한히 반복. n이 주어지면 해당 횟수만큼만 반복
In [6]:
cnt = 1
for i in it.repeat("a") :
print(i, end=" ")
cnt += 1
if cnt == 10 :
break
a a a a a a a a a
In [7]:
for i in it.repeat(7, 5) :
print(i, end=" ")
7 7 7 7 7
2. 조합형 Iterator 생성¶
it.porduct(iterable1, iterable2 ...)
복수의 iterable 개체에서 각각 선택할 수 있는 순서쌍의 조합을 모두 출력
표현이 조금 복잡한데 출력 결과를 보면 쉽게 이해할 수 있다.
배열 순서대로 출력하므로 정렬 후 출력하면 결과도 정렬되어 있음
In [8]:
x = [20, 10, 30]
y = [4, 2, 3]
for i in it.product(x, y) :
print(i, end=" ")
(20, 4) (20, 2) (20, 3) (10, 4) (10, 2) (10, 3) (30, 4) (30, 2) (30, 3)
In [9]:
# 정렬 후 출력
x = [20, 10, 30]
y = [4, 2, 3]
x.sort()
y.sort()
for i in it.product(x, y) :
print(i, end=" ")
(10, 2) (10, 3) (10, 4) (20, 2) (20, 3) (20, 4) (30, 2) (30, 3) (30, 4)
In [10]:
# 리스트 comprehension으로도 나타낼 수 있음
x = [20, 10, 30]
y = [4, 2, 3]
print([(i, j) for i in x for j in y])
[(20, 4), (20, 2), (20, 3), (10, 4), (10, 2), (10, 3), (30, 4), (30, 2), (30, 3)]
In [11]:
# 셋 이상의 iterable도 가능
x = [20, 10, 30]
y = [4, 2, 3]
z = [True, False]
for i in it.product(x, y, z) :
print(i, end=" ")
(20, 4, True) (20, 4, False) (20, 2, True) (20, 2, False) (20, 3, True) (20, 3, False) (10, 4, True) (10, 4, False) (10, 2, True) (10, 2, False) (10, 3, True) (10, 3, False) (30, 4, True) (30, 4, False) (30, 2, True) (30, 2, False) (30, 3, True) (30, 3, False)
it.permutations(iterable, r=len(iterable))
iterable 객체의 요소 중 r개를 선택하는 순열을 모두 출력
기본 r은 iterable의 길이
In [12]:
x = [1, 2, 3]
for i in it.permutations(x) :
print(i, end=" ")
(1, 2, 3) (1, 3, 2) (2, 1, 3) (2, 3, 1) (3, 1, 2) (3, 2, 1)
In [13]:
x = [1, 2, 3]
for i in it.permutations(x, 2) :
print(i, end=" ")
(1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2)
it.combinations(iterable, r)
iterable 객체의 요소 중 중복 없이 r개를 선택하는 조합을 모두 출력
In [14]:
x = [1, 2, 3, 4, 5]
for i in it.combinations(x, 2) :
print(i, end=" ")
(1, 2) (1, 3) (1, 4) (1, 5) (2, 3) (2, 4) (2, 5) (3, 4) (3, 5) (4, 5)
combinations_with_replacement(iterable, r)
iterable 객체의 요소 중 중복을 허용하여 r개를 선택하는 조합을 모두 출력
In [15]:
x = [1, 2, 3, 4, 5]
for i in it.combinations_with_replacement(x, 2) :
print(i, end=" ")
(1, 1) (1, 2) (1, 3) (1, 4) (1, 5) (2, 2) (2, 3) (2, 4) (2, 5) (3, 3) (3, 4) (3, 5) (4, 4) (4, 5) (5, 5)
'파이썬 팁' 카테고리의 다른 글
다차원 리스트 값 바꿀 때 여러 줄이 같이 바뀐다면 (0) | 2022.12.09 |
---|---|
파이썬 표준 라이브러리 itertools 사용하기 (2) (0) | 2022.12.06 |
dict 자료형 정렬하기 (0) | 2022.12.05 |
list.sort()와 sorted()의 차이, key 인자 활용 (0) | 2022.12.04 |
클래스, 메소드 정보 조회하기 (0) | 2022.12.01 |
댓글