내장 기능지도 () 함수와 감소 () 함수

파이썬 내장지도 ()와 감소 () 함수.

Google의 유명한 에세이 논문을 읽어 보면 "맵리 듀스 : 대형 클러스터에 단순화 된 데이터 처리"를, 당신은 아마 /지도에 대한 개념을 이해 줄일 수 있습니다.

우리는지도를보세요. 지도 () 함수는 시퀀스는 시퀀스의 각 요소에인가 된 입력 기능을 순차적으로 매핑하고, 새로운리스트로 결과를 리턴하기 위해 두 인자 기능을 수용한다.

그림, 우리는 ()리스트에서이 함수 [1, 2, 3, 4, 5, 6, 7, 8, 9의 맵을 사용한다, 이러한 함수 F (X) = X2가 다음을 달성하기 위해 :

 

이제, 우리는 달성하기 위해 파이썬 코드를 사용 :

1
4
5
>>> 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 ]

맵 () 함수, 즉 개체 자체 F의 첫번째 인수이다.

당신은 당신이, 당신은 결과를 계산할 수있다 () 함수를 매핑 루프를 작성하지 않아도 생각 될 수 있습니다

1
4
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, 또한 디지털 - 모든 목록으로 임의의 복잡한 기능의 문자열 :

1
>>> map ( str , [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ])
[ '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' ]

단 한 줄의 코드 만.

사용을 줄여 봐. 이 기능은, 두 개의 매개 변수를 수신한다 시퀀스 [X1, X2, X3 ...]의 함수에 기초 줄이고 누적 할 시퀀스의 다음 요소의 결과를 감소 지속 효과가있다 :

감소 (F는 [X1은 X2, X3, X4])는 F (F (F (X1, X2), X3) X4가) =

의이 요약의 순서, 구현을 줄일 수 있습니다 가정 해 봅시다 :

1
4
5
>>> def  add(x, y):
...   return  x +  y
...
>>> reduce (add, [ 1 , 3 , 5 , 7 , 9 ])
25

물론, 합계가 내장 된 파이썬 합계의 직접적인 기능을 할 수있다 (), 감소 사용할 필요가 없습니다.

우리는 순서 원한다면 [1, 3, 5, 7, 9] 정수 13,579에, 유용하게 사용할 수 감소 :

1
4
5
>>> def  fn(x, y):
...   return  x *  10  +  y
...
>>> reduce (fn, [ 1 , 3 , 5 , 7 , 9 ])
13579

이 예제 자체는별로 사용하지만, 문자열 str을 고려하는 것은 거의 변화가 위의 예를 들면, 시퀀스,지도 (), 우리는 str을 쓸 수로있다가 기능을 int로 변환 할 수 있습니다 :

1
4
5
6
(7)
8
>>> 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 기능으로 구성되어 있습니다 :

1
4
5
6
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))

이는 상기 람다 함수를 사용하여 간략화 될 수있다 :

1
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]
1
def  str2int(s):
   return  reduce ( lambda  x,y: x * 10 + y, map (char2num, s))

즉, 파이썬을 가정하는 것은 INT () 함수를 제공하지 않습니다, 당신은 문자열을 정수로 변환하기 위해 자신의 함수를 작성하고, 코드의 단지 몇 줄의을 필요로 할 수 있습니다!

연습

지도 () 함수를 사용하여 표준이 아닌 영어 이름의 사용자 입력, 기타 사양 소문자 이름 첫 글자가 대문자가됩니다. 입력 : 아담 ','리사 ','바트 '], 출력 : 아담', '리사', '바트'].

파이썬은 합 () 함수 (목록을 받아 감소 사용할 수있는 자극 () 함수를 작성,) 직교을 목록과 금액을 받아 들일 수 있습니다.

추천

출처www.cnblogs.com/TF511/p/10963869.html