본문 바로가기

웹 프로그래밍/Python

파이썬 여러가지 함수, 예제를 통한 이해

map함수



map( 함수, 반복 가능한 자료형 )
반복 가능한 자료형 = literable
map은 원본 리스트를 변경하지 않고 새 리스트를 생성한다.

1
2
list(map(lambda i:i**2, [1,2,3]))
#[1, 4, 9]

 

1
2
3
4
5
= [2,3,4,5]    
for i in range(len(a)):
    a[i] = int(a[i])
a
#[2, 3, 4, 5]
 
1
2
list(map(int, a))
#[2, 3, 4, 5]
 
1
2
list(map(str, a))
#['2', '3', '4', '5']

 

1
2
list(map(lambda i:i**2, a))
#[4, 9, 16, 25]

 

 

리스트 축약 문법


[ {표현식} for {변수} in {반복자/연속열} if {조건표현식} ]
리스트 축약은 편리한 대신 전체 연속열을 모두 평가해서 리스트로 만들기 때문에 메모리 낭비가 심하다. 

1
2
3
4
5
6
7
8
9
10
xs = range(10)
 
doubled = [x*2 for x in xs]
#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
 
squared = [(x+1)**2 for x in xs]
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
 
evens = [x for x in xs if x % 2 is 0]
#[0, 2, 4, 6, 8]
 
 
reduce 함수


reduce(f, literable)
리듀스는 여러 개의 값인 상태를 축약하여 하나의 값으로 만드는 과정이며, 
그 과정이 마치 리스트를 앞에서부터 차곡차곡 접어나가는 것처럼 보인다고 해서  폴딩(folding)이라고 한다.

중간값 리스트 평가식
0 [1, 2, 3, 4 ,5] 0 + 1   
[2, 3, 4, 5] 1 + 2    
3 [3, 4, 5] 3 + 3   
6 [4, 5] 6 + 4   
10 [5] 10 + 5  
15 [] ::완료


1
2
3
from functools import reduce
reduce(lambda x,y:x+y,[0,1,2,3,4])
#10

1
2
3
from functools import reduce
reduce(lambda x,y:x+y, range(0,5))
#10
 

 

문자열 거꾸로 바꾸기

1
2
3
from functools import reduce
reduce(lambda x,y:y+x,list('abcd'))
#'dcba'

 

 

 

최댓값 구하기

 

1
2
3
func = lambda a, b: a if (a > b) else b
reduce(func, [3476299668])
#96

filter 함수


filter(f, literable) 

1
2
list(filter(lambda x:x<5range(10))) 
#[0, 1, 2, 3, 4]
1
2
list(filter(lambda x:x%2range(10)))
#[0, 2, 4, 6, 8, 10]
1
2
list(filter(lambda x:x%2range(10)))
#[0, 2, 4, 6, 8, 10]
 

"x%2" 의미
x%2 != 0   --> true
x%2 == 1  --> true