파이썬 itertools 사용법

1. 소개
Itertools는 파이썬의 반복자 모듈로 itertools에서 제공하는 도구는 매우 효율적이고 메모리를 절약합니다.
이러한 도구를 사용하면 효율적인 루프를위한 사용자 지정 반복기를 만들 수 있습니다.

  • Infinite Iterator
     itertools 패키지에는 무한 반복 할 수있는 세 개의 반복기가 제공됩니다. 즉,이를 사용할 때 결국 중지 할 반복자를 원하는지 아니면 신발을 무기한 반복해야하는지 알아야합니다.

(1) 카운트 (초기 값 = 0, 단계 크기 = 1) : 카운트 반복기는 들어오는 시작 매개 변수에서 시작하여 균등 한 간격의 값을 반환합니다. count는 지정된 단계 매개 변수를 수신 할 수도 있습니다. 간단한 예를 살펴 보겠습니다.

from itertools import count
for i in count():
    print i
    if i > 10:
        break

#从0开始循环
0
1
2
3
4
5
6
7
8
9
10
11

(2) islice (count (10), 5) : 10 개부터 시작하여 5 개 요소를 출력 한 후 끝납니다. islice의 두 번째 매개 변수는 반복을 중지 할시기를 제어합니다. 그러나 그 의미는 "숫자 5에 도달하면 중지"가 아니라 "5 회 반복 후 중지"입니다.

from itertools import count,islice
for i in islice(count(10),5):
    print i

#从10开始循环迭代5次后退出循环
10
11
12
13
14

(3) 순환 : 여기서 우리는 세 글자 XYZ 사이를 무한 반복하는 for 루프를 만듭니다. 물론 영원히 반복하고 싶지는 않기 때문에 간단한 카운터를 추가하여 루프를 종료했습니다.

from itertools import cycle
count = 0
for item in cycle('XYZ'):
    if count > 7:
        break
    print item
    count = count + 1

#在xyz之间无限循环
X
Y
Z
X
Y
Z
X

(4) accumulate (Iterable object [, function]) (python3에 적용 가능)

누산 반복기는 누적 합계 결과를 반환하거나 두 개의 매개 변수가 전달 된 경우 전달 된 함수에 의한 누적 계산 결과를 반환합니다. 기본 설정은 추가입니다.

여기에서 accumulate를 가져온 다음 0-9의 10 개의 숫자를 전달했습니다. 반복기는 들어오는 숫자를 순서대로 누적하므로 첫 번째는 0, 두 번째는 0 + 1, 세 번째는 1 + 2 등이됩니다.

이제 연산자 모듈을 가져온 다음 추가합니다.

 >>> from itertools import accumulate
 >>> list(accumulate(range(10)))
 [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

여기서 우리는 숫자 1-4를 누적 반복기에 전달합니다. 또한 수신 된 매개 변수를 곱하는 function : operator.mul을 전달합니다.

따라서 각 반복에서 반복자는 나누기를 곱셈으로 대체합니다 (1 × 1 = 1, 1 × 2 = 2, 2 × 3 = 6 등).

 from itertools import accumulate
 import operator
 >>> list(accumulate(range(1, 6), operator.mul))
 [1, 2, 6, 24, 120]

(5) 체인 (* 반복 가능한 객체)

체인은 반복 객체 그룹을 연결하여 더 큰 반복자를 형성 할 수 있습니다.

from itertools import chain
for c in chain(['a','b','cd'],['ef',123],'XYZ'):
    print c

#输出
a
b
cd
ef
123
X
Y
Z

#备注类似于多个list叠加
mm = ['a','b','cd'] + ['ef',123] + ['X','Y','Z']

(6) groupby

반복기에서 인접한 중복 요소를 골라서 합치십시오.

from itertools import groupby

for key, group in groupby('AAABBBCCAAA'):
    print key,list(group)

#输出
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']

추천

출처blog.csdn.net/sinat_38682860/article/details/108624203