inanJeong
이난's 프로그래밍 지식 사이트
inanJeong
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 회고록 및 개발일기 (4)
    • Advanced (0)
    • Python (18)
      • 파이썬 기초 (0)
      • 파이썬스럽게 개발하기 (6)
      • Django (5)
      • 고성능 파이썬 (0)
      • matplotlib (3)
      • Error (4)
    • 기타 (61)
      • Shell Script (2)
      • 라즈베리파이 (5)
      • 티스토리 꾸미기 (2)
      • 알고리즘 (2)
      • 소프트웨어 개발론 (0)
      • JIRA(프로젝트 관리 도구) (1)
      • git (1)
      • Swagger (1)
      • docker (2)
      • web_server (2)
      • MySQL (2)
      • front_end (3)
      • javascripts(typescript + ES.. (5)
      • ServerSideApplication (1)
      • Data Engineering (5)
      • flutter (2)
      • JSP (10)
      • Spring boot (5)
      • React (3)
      • elasticSearch (1)
      • AWS (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
inanJeong

이난's 프로그래밍 지식 사이트

[python] itertools
Python/파이썬스럽게 개발하기

[python] itertools

2022. 3. 17. 14:00

python

 

itertools

itertools는 내장모듈이다.

import itertools

 

 

1. 여러 이터레이터 연결

(1) chain

여러 이터레이터를 하나의 순차적인 이터레이터로 합치고 싶을 때 사용

iter = itertools.chain([1,2,3], [4,5,6])
print(list(iter))

>>>
[1, 2, 3, 4, 5, 6]

 

(2) repeat

동일한 값을 반복하고 싶을 때 사용

iter = itertools.repeat(10, 3)
print(list(iter))

>>>
[10, 10, 10]

 

(3) cycle

원소들을 반복하고 싶을 때 사용

iter = itertools.cycle('ABCD')
result = [next(iter) for _ in range(10)]
print(result)

>>>
['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B']

iter = itertools.cycle([4, 7])
result = [next(iter) for _ in range(10)]
print(result)

>>>
[4, 7, 4, 7, 4, 7, 4, 7, 4, 7]

 

(4) tee

하나의 이터레이터를 병렬적으로 늘림(이터레이터 깊은 복사)

iter1, iter2, iter3 = itertools.tee(['test', '복사'], 3)
print(list(iter1))
print(list(iter2))
print(list(iter3))

>>>
['test', '복사']
['test', '복사']
['test', '복사']

-------------------------------------------------------

iter1, iter2, iter3 = itertools.tee(['test', '복사'], 3)
iterList = list(iter1)
iterList[0] =  "change"
print(iterList)
print(list(iter2))
print(list(iter3))

list1 = ['test', '복사'] 
list2 = list1
list3 = list1
list_copy_iter, _ = itertools.tee(list1, 2)# 깊은복사
list4 = list(list_copy_iter)

list1[0] = "change"

print(list1)
print(list2)
print(list3)
print(list4)

>>>
['change', '복사']
['test', '복사']
['test', '복사']

['change', '복사']
['change', '복사']
['change', '복사']
['test', '복사']

(5) zip longest

key와 value값의 이터레이터를 다 사용할 경우 fillvalue로 지정한 값을 채워준다.

※ fillvalue 디폴트 값은 None이다.

keys = ['A', 'A', 'C', 'B']
values = ['+', '-']

temp = list(zip(keys, values))
print("zip: ", temp)

iter = itertools.zip_longest(keys, values, fillvalue=0)
longest= list(iter)
print('zip_longest: ', longest)

>>>
zip: [('A', '+'), ('A', '-')]
zip_longest: [('A', '+'), ('A', '-'), ('C', 0), ('B', 0)]

 

2. 이터레이터에서 원소 거르기

이터레이터에서 원소를 필터링할 때 쓸 수 있는 여러 함수

(1) islice

시퀀스 슬라이스나 스트라이딩 기능과 비슷함

values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#end
first_five = itertools.islice(values, 5)
print(list(first_five))

#start, end
except_start_end = itertools.islice(values, 1, len(values) - 1)
print(list(except_start_end))

# start, end, iter
middle_odds = itertools.islice(values, 2, 8, 2)
print(list(middle_odds))

>>>
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6, 7, 8, 9]
[3, 5, 7]

 

(2) takewhile

이터레이터에서 주어진 술어(predicate)가 False를 반환하는 첫 원소가 나타날 때까지 원소를 돌려줌

values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
less_than_seven = lambda x: x<7
iter = itertools.takewhile(less_than_seven, values)
print(list(iter))

>>>
[1, 2, 3, 4, 5, 6]

 

(3) dropwhile

이터레이터에서 주어진 술어(predicate)가 False를 반환하는 첫 원소가 나타날 때까지 원소를 건너뛴다.

values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
less_than_seven = lambda x: x<7
iter = itertools.dropwhile(less_than_seven, values)
print(list(iter))

>>>
[7, 8, 9, 10]

 

(4) filterfalse

filter 내장함수의 반대 결과를 얻을 수 있음

values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = lambda x: x % 2 == 0

filter_result = filter(evens, values)
filter_false_result = itertools.filterfalse(evens, values)

print(list(filter_result))
print(list(filter_false_result))

>>>
[2, 4, 6, 8, 10]
[1, 3, 5, 7, 9]

 

3. 이터레이터에서 원소의 조합 만들어내기

 

(1) accumulate

 

(2) product

 

(3) permutations

 

(4) combinations

 

(5) combinations_with_replacement

'Python > 파이썬스럽게 개발하기' 카테고리의 다른 글

[python] mimesis - 파이썬 mock 데이터  (0) 2022.08.18
[python] haversine, 위도 경도를 이용하여 거리를 구하는 모듈  (0) 2022.07.26
[python] *args and **kwargs  (0) 2022.07.19
[python] 파이썬스럽게 개발하기 다수의 링크  (0) 2022.07.19
[Python3] 동시성과 병렬성  (0) 2021.04.16
    'Python/파이썬스럽게 개발하기' 카테고리의 다른 글
    • [python] haversine, 위도 경도를 이용하여 거리를 구하는 모듈
    • [python] *args and **kwargs
    • [python] 파이썬스럽게 개발하기 다수의 링크
    • [Python3] 동시성과 병렬성
    inanJeong
    inanJeong
    저작권 문제시 이메일 발송 부탁드립니다.(해당 게시글 바로 내리겠습니다.) ghjklla007@naver.com

    티스토리툴바