파이썬 내장지도 ()와 감소 () 함수.
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 () 함수를 제공하지 않습니다, 당신은 문자열을 정수로 변환하기 위해 자신의 함수를 작성하고, 코드의 단지 몇 줄의을 필요로 할 수 있습니다!
연습
지도 () 함수를 사용하여 표준이 아닌 영어 이름의 사용자 입력, 기타 사양 소문자 이름 첫 글자가 대문자가됩니다. 입력 : 아담 ','리사 ','바트 '], 출력 : 아담', '리사', '바트'].
파이썬은 합 () 함수 (목록을 받아 감소 사용할 수있는 자극 () 함수를 작성,) 직교을 목록과 금액을 받아 들일 수 있습니다.