>백엔드 개발 >파이썬 튜토리얼 >Python에서 함수 map() 및 Reduce() 사용

Python에서 함수 map() 및 Reduce() 사용

高洛峰
高洛峰원래의
2017-03-11 10:06:011981검색

이 글에서는 주로 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()을 사용하여 다음과 같이 구현할 수 있습니다.

2015427113120966.png (341×245)

이제 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.