본문 바로가기
파이썬 팁

파이썬 표준 라이브러리 itertools 사용하기 (1)

by 로널드 피셔 2022. 12. 5.

 

 

파이썬 표준 라이브러리 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)

댓글