Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

효율적인 루핑을 위한 반복자를 생성하는 Python 함수

<시간/>

대부분의 프로그래밍 언어에서와 같이 Python은 루프 구조를 형성하기 위해 while 및 for 문을 제공합니다. for 문은 목록, 튜플 또는 문자열과 같은 반복 가능한 항목을 탐색하는 데 특히 유용합니다. 보다 효율적이고 빠른 반복 도구는 Python 표준 라이브러리의 itertools 모듈에 정의되어 있습니다. 이 반복자 빌딩 블록은 Haskell 및 SML과 같은 기능적 프로그래밍 언어에서 유사한 도구를 Python으로 구현한 것입니다.

itertools 모듈의 함수는 세 가지 유형이 있습니다.

  • 무한 반복자
  • 유한 반복자
  • 조합 반복자

다음 함수는 무한 시퀀스를 생성합니다.

카운트() - 이 함수는 시작 값에서 균등한 간격의 값의 반복자를 반환합니다. 함수는 이 간격만큼 연속 값을 증가시키는 선택적 단계 값을 가질 수 있습니다.

>>> from itertools import count
>>> for x in count(20):
print (x)
>>> for x in count(100,10):
print (x)

첫 번째 명령문은 20부터 시작하여 무한 시퀀스를 생성하고 두 번째 명령문은 100부터 스테핑 빈도가 10인 숫자를 생성합니다. 루프는 무한하며 자체적으로 종료되지 않습니다. ctrl-C

를 누르면 종료됩니다.

주기() - 이 함수는 주어진 iterable에서 각 요소를 반환하기 시작하고 복사본을 저장합니다. 요소가 소진되면 저장된 사본의 요소가 반환되어 무한 루프를 형성합니다.

>>> from itertools import cycle
>>> for x in cycle("hello"):
print (x)

문자열의 문자는 키보드 인터럽트 Ctrl-C가 발행될 때까지 반복적으로 인쇄됩니다.

반복() − 이 함수는 객체 인수를 반복적으로 반환합니다. 두 번째 인수인 'times'를 입력하면 그만큼 반복됩니다.

>>> from itertools import repeat
>>> for x in repeat(1):
print (x)
>>> for x in repeat('hello', 10):
print (x)

첫 번째 루프는 1을 끝없이 인쇄합니다. 두 번째는 'hello'를 10번 출력합니다.

다음 범주의 함수는 가장 짧은 입력 시퀀스에서 종료되는 유한 반복자를 반환합니다.

누적() − 이 함수에는 두 개의 매개변수가 있습니다. 첫 번째는 이터러블(목록, 튜플 또는 문자열)입니다. 두 번째 매개변수는 기본적으로 operator.add()(표준 덧셈 연산자를 구현하는 연산자 모듈의 함수)이지만 두 개의 숫자 매개변수를 받는 다른 함수일 수 있습니다.

accumulate(sequence, func)

입력 시퀀스의 처음 두 요소는 func에 의해 처리됩니다. 프로세스의 결과는 다음 반복을 위한 첫 번째 매개변수이고 func에 대한 두 번째 매개변수는 입력 시퀀스의 세 번째 요소입니다. 이 과정은 시퀀스가 ​​소진될 때까지 반복됩니다. 누적 함수는 각 요소가 연속된 요소를 처리한 결과를 누적한 반복자를 반환합니다.

다음 예에서는 목록의 숫자가 누적 추가됩니다. 기본 함수 인수는 추가 작업입니다.

>>> from itertools import accumulate
>>> list(accumulate([1,2,3,4,5]))
[1, 3, 6, 10, 15]

누적() 함수의 두 번째 매개변수로 사용자 정의 함수를 사용할 수 있습니다.

>>> def multiply(x,y):
return x*y
>>> list(accumulate([1,2,3,4,5], multiply))
[1, 2, 6, 24, 120]

이 동작은 내장된 reduce() 함수와 다소 유사합니다. reduce() 함수는 누적의 최종 결과만 반환하는 반면, gather()는 모든 중간 결과의 반복자를 생성합니다.

체인() − 이 함수는 매개변수로 하나 이상의 반복 가능 항목을 가질 수 있습니다. 첫 번째 iterable의 각 요소를 결과 iterator로 생성하고 iterable 매개변수가 소진될 때까지 다음으로 진행합니다.

>>> from itertools import chain
>>> list(chain([10,20],'hello',range(4)))
[10, 20, 'h', 'e', 'l', 'l', 'o', 0, 1, 2, 3]

dropwhile() - 이 함수는 술어 함수 인수가 true를 반환하는 한 terable에서 요소를 삭제하여 반복자를 반환합니다. 함수가 false를 반환하는 순간 나머지 모든 요소는 반복자에게 반환됩니다.

>>> from itertools import dropwhile
>>> def iseven(x):
if x % 2 == 0:
return True
else:
return False
>>> list(dropwhile(iseven, [12,90,61,4,15]))
[61, 4, 15]

filterfalse() − 이 함수는 술어 함수가 False인 요소를 필터링하여 반복자를 반환합니다.

>>> from itertools import filterfalse
>>> def iseven(x):
if x % 2 == 0:
return True
else:
return False
>>> list(filterfalse(iseven, [12,90,61,4,15]))
[61, 15]

islice() - 이 함수는 iterable에서 특정 요소를 선택하여 iterator를 빌드합니다. 선택 기준은 시작, 중지 및 단계 매개변수에 따라 다릅니다. 선택은 시작 값에서 시작하여 중지 값까지 계속됩니다. stop이 None이면 iterable의 끝까지 가고, 그렇지 않으면 지정된 인덱스에서 선택이 중지됩니다. 단계 매개변수는 기본적으로 1입니다. 요소 선택은 단계 매개변수에 의해 증가합니다. 어떤 매개변수도 음수일 수 없습니다.

>>> from itertools import islice
>>> list(islice(range(10),1,5,2))
[1, 3]
>>> list(islice(range(10),0,None,3))
[0, 3, 6, 9]
>>> list(islice(range(10),5,None))
[5, 6, 7, 8, 9]
>>> list(islice(range(10),5))
[0, 1, 2, 3, 4]

다음 함수는 반복 가능한 개체에서 조합 반복자를 생성합니다.

제품() - 이 함수는 입력 시퀀스에 있는 요소의 데카르트 곱인 반복자를 생성합니다. 이것은 반복 가능한 각 시퀀스를 순회하기 위한 하나의 중첩 for 루프를 구성하는 것과 같습니다.

다음 예제에서는 목록 이해 기술을 사용하여 두 시퀀스에서 두 개의 중첩 루프를 실행하여 데카르트 곱을 빌드합니다.

>>> [[x,y] for x in [1,2,3] for y in ['a','b','c']]
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, 'b'], [2, 'c'], [3, 'a'], [3, 'b'], [3, 'c']]

product() 함수는 유사한 결과를 생성합니다.

>>> from itertools import product
>>> list(product([1,2,3],['a','b','c']))
[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]

순열() - 이 함수는 입력 반복 가능한 요소의 가능한 모든 순열을 산출합니다. 각 순열의 길이는 이 함수에 대한 두 번째 매개변수로 지정될 수 있습니다. 지정하지 않으면 길이는 1입니다.

>>> list(permutations(range(1,4),2))
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

조합() − 이 함수는 반복 가능한 입력에서 가능한 모든 요소 조합을 산출합니다. 각 순열의 길이는 이 함수에 대한 두 번째 매개변수로 지정될 수 있습니다. 지정하지 않으면 길이는 1입니다.

>>> from itertools import combinations
>>> list(combinations(range(1,4),2))
[(1, 2), (1, 3), (2, 3)]

이 기사에서는 Python 라이브러리의 itertools 모듈에 정의된 다양한 반복자 도구를 소개합니다.