python 고급 함수 map/reduce 간단하게 알 아 보기
Python 에 map()와 reduce()함 수 를 만 들 었 습 니 다.
지도 부터 봅 시다.map()함 수 는 두 개의 인 자 를 받 습 니 다.하 나 는 함수 이 고 하 나 는 Iterable 입 니 다.map 는 들 어 오 는 함 수 를 순서대로 배열 의 모든 요소 에 작용 하고 결 과 를 새로운 Iterator 로 되 돌려 줍 니 다.
예 를 들 어 예 를 들 어 우 리 는 함수 f(x)=x2 가 있 는데 이 함 수 를 하나의 list[1,2,3,4,5,6,7,8,9]에 작용 하려 면 map()로 다음 과 같이 실현 할 수 있다.
현재,우 리 는 Python 코드 로 실현 합 니 다.
def f(x):
return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print list(r)
실행 결과:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
Process finished with exit code 0
map()가 들 어 오 는 첫 번 째 매개 변 수 는 f,즉 함수 대상 자체 입 니 다.결과 r 는 Iterator 이 고 Iterator 는 타성 서열 이기 때문에 list()함 수 를 통 해 전체 서열 을 계산 하고 list 로 되 돌려 줍 니 다.map()함수 가 필요 없 이 순환 을 써 도 결 과 를 계산 할 수 있다 고 생각 할 수 있 습 니 다.
L = []
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
L.append(f(n))
print L
그 럴 수 있 습 니 다.하지만 위의 순환 코드 에서'f(x)를 list 에 작용 하 는 모든 요 소 를 한눈 에 보고 결 과 를 새로운 list 로 만 들 수 있 습 니까?'그래서 map()는 고급 함수 로 서 사실상 연산 규칙 을 추상 화 했다.따라서 우 리 는 간단 한 f(x)=x2 를 계산 할 수 있 을 뿐만 아니 라 임의의 복잡 한 함수 도 계산 할 수 있다.예 를 들 어 이 list 의 모든 숫자 를 문자열 로 바 꿀 수 있다.
print list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
실행 결과:
['1', '2', '3', '4', '5', '6', '7', '8', '9']
Process finished with exit code 0
코드 한 줄 만 필요 합 니 다.reduce 의 용법 을 다시 보다.reduce 는 하나의 함 수 를 하나의 서열[x1,x2,x3,...]에 작용 합 니 다.이 함 수 는 반드시 두 개의 매개 변 수 를 받 아야 합 니 다.reduce 는 결 과 를 계속 서열 의 다음 요 소 를 누적 계산 해 야 합 니 다.그 효 과 는 다음 과 같 습 니 다.
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
예 를 들 어 하나의 서열 에 대해 화 해 를 구하 면 reduce 로 실현 할 수 있다.
from functools import reduce
def add(x, y):
return x + y
print reduce(add, [1, 3, 5, 7, 9])
실행 결과:
25
Process finished with exit code 0
물론 구 와 연산 은 Python 내 에 함수 sum()을 직접 만 들 수 있 으 며 reduce 를 사용 할 필요 가 없습니다.그러나 서열[1,3,5,7,9]을 정수 13579 로 바 꾸 려 면 reduce 가 도움 이 될 수 있다.
from functools import reduce
def fn(x, y):
return x * 10 + y
print reduce(fn, [1, 3, 5, 7, 9])
실행 결과:
13579
Process finished with exit code 0
이 예 자 체 는 그다지 쓸모 가 없 지만 문자열 str 도 하나의 서열 임 을 감안 하여 위의 예 를 약간 바 꾸 고 map()에 맞 추 면 str 를 int 로 변환 하 는 함 수 를 쓸 수 있 습 니 다.
def fn(x, y):
return x * 10 + y
def char2num(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
print reduce(fn, map(char2num, '13579'))
실행 결과:
13579
Process finished with exit code 0
str2int 로 정리 한 함 수 는:
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return DIGITS[s]
return reduce(fn, map(char2num, s))
lambda 함수 로 더욱 간소화 할 수 있 습 니 다.
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def char2num(s):
return DIGITS[s]
def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))
즉,Python 이 int()함 수 를 제공 하지 않 았 다 고 가정 하면 문자열 을 정수 로 바 꾸 는 함 수 를 스스로 쓸 수 있 고 몇 줄 의 코드 만 필요 합 니 다!이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.