이 글에서는 주로 Python의 map() 함수와 Reduce() 함수 사용법을 소개합니다. 코드는 Python2.x 버전을 기준으로 합니다. 필요하신 분들은 참고하시면 됩니다.
Python에는 내장되어 있습니다. map()과 Reduce() 함수.
Google의 유명한 논문 "MapReduce: Simplified Data Processing on Large Clusters"를 읽어보셨다면 map/reduce의 개념을 대략적으로 이해하실 수 있습니다.
우선 지도를 살펴보겠습니다. map() 함수는 두 개의 매개변수를 받습니다. 하나는 함수이고 다른 하나는 시퀀스입니다. map은 전달된 함수를 시퀀스의 각 요소에 차례로 적용하고 결과를 새 목록으로 반환합니다.
예를 들어 f(x)=x2라는 함수가 있고 이 함수를 목록 [1, 2, 3, 4, 5, 6, 7, 8, 9] map()을 사용하여 다음과 같이 구현할 수 있습니다.
이제 Python 코드를 사용하여 구현합니다.
>>> def f(x): ... return x * x ... >>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]
map()이 전달한 첫 번째 매개변수는 함수 객체 자체인 f입니다.
map() 함수가 필요하지 않다고 생각할 수도 있습니다. 루프를 작성하여 결과를 계산할 수 있습니다.
L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) print L
그렇군요, 그런데 위의 루프 코드를 보면 "리스트의 각 요소에 f(x)를 적용하고 그 결과로 새로운 리스트가 생성된다"는 것을 한눈에 알 수 있나요?
따라서 map()은 실제로 연산 규칙을 추상화하므로 간단한 f(x)=x2를 계산할 수 있을 뿐만 아니라 다음과 같은 복잡한 함수도 계산할 수 있습니다. 이 목록의 모든 숫자를 문자열로 변환하세요.
>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]) ['1', '2', '3', '4', '5', '6', '7', '8', '9']
한 줄의 코드만 필요합니다.
Reduce 사용법을 살펴보세요. 감소는 시퀀스 [x1, x2, x3...]에 함수를 적용합니다. 이 함수는 두 개의 매개변수를 받아야 합니다. 감소는 시퀀스의 다음 요소로 결과의 누적 계산을 계속합니다. >reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
예를 들어 시퀀스를 합산하려면 Reduce를 사용할 수 있습니다. 구현:
>>> def add(x, y): ... return x + y ... >>> reduce(add, [1, 3, 5, 7, 9]) 25
물론 합계 연산은 Python 내장 함수 sum()을 사용하여 직접 수행할 수 있으므로 축소를 사용할 필요가 없습니다.
그러나 시퀀스 [1, 3, 5, 7, 9]를 정수 13579로 변환하려면 다음과 같이 축소하는 것이 유용할 수 있습니다.
>>> def fn(x, y): ... return x * 10 + y ... >>> reduce(fn, [1, 3, 5, 7, 9]) 13579
이 예제 자체는 별로 유용하지 않지만 문자열 str도 시퀀스라고 생각하면 위 예제를 약간 수정하고 map()을 사용하면 str을 int로 변환하는 함수를 작성할 수 있습니다.
>>> def fn(x, y): ... return x * 10 + y ... >>> def char2num(s): ... return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] ... >>> reduce(fn, map(char2num, '13579')) 13579
str2int로 구성된 함수는 다음과 같습니다.
def str2int(s): def fn(x, y): return x * 10 + y def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] return reduce(fn, map(char2num, s))
람다를 사용할 수도 있습니다. 함수를 더욱 단순화하면 다음과 같습니다:
def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
def str2int(s): return reduce(lambda x,y: x*10+y, map(char2num, s))
즉, Python이 int를 제공하지 않는다고 가정합니다. () 함수, 당신은 문자열을 정수로 변환하는 함수를 직접 작성할 수 있으며, 코드 몇 줄만 있으면 됩니다!
연습map() 함수를 사용하여 사용자가 입력한 비표준 영어 이름을 첫 글자만 대문자로 하고 나머지는 표준 이름으로 변경합니다. 소문자로. 입력: ['adam', 'LISA', 'barT'], 출력: ['Adam', 'Lisa', 'Bart'].
Python에서 제공하는 sum() 함수는 목록을 받아 합계를 계산할 수 있습니다. 목록을 받을 수 있는 prod() 함수를 작성하고 Reduce()를 사용하여 곱을 계산하세요.
위 내용은 Python에서 함수 map() 및 Reduce() 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!