본문 바로가기
developStudy

[Python] Map, Lambda, Zip

by holaf 2021. 2. 18.
반응형

😇 Map

Map은 리스트에 있는 모든 아이템에게 어떠한 조치를 내릴 때 (즉, 반복문을 돌릴 때) 쓰는 긴 코드를 확 줄여줄 수 있다.

#제곱을 시켜주는 함수가 있다고 치자.
def pow(n):
	return n**2
    
bts=[1,2,3,4,5,6,7]

#일반적인 반복문을 쓴다면, 아래처럼 길게 써야한다.
for i in range(len(bts)):
	bts[i]=pow(bts[i])
    
print(bts)
#[1,4,9,16,25,36,49]

 

Map 함수를 쓰면 확 줄일 수 있다. Map 함수는 리스트의 아이템을 하나씩 돌면서, 함수를 적용시켜주기 때문이다. (즉, 리스트의 아이템 개수만큼 함수를 호출시키는것)

list(map(pow,bts))
#[1, 4, 9, 16, 25, 36, 49]

 

Map의 두번째 파라미터는 꼭 리스트여야하는 것은 아니고, iterable한 객체면 모두 된다. 대표적으로 list, str, tuple이 있다.

예컨대 아래와 같이 str에게 어떠한 함수를 반복적으로 적용시키고 싶다면, map함수를 쓰면된다.

def dbl(n):
    return n*2
    
bts='bts'
    
list(map(dbl,bts))
#['bb', 'tt', 'ss']

 

심지어 Map 함수는 2개의 리스트에 대해서도 함수를 적용할 수 있다.

def sum(a,b):
    return a+b

bts1=[1,2,3]
bts2=[3,2,1]

list(map(sum,bts1,bts2))
#[4,4,4]

 

🐑 Lambda 람다

Lambda를 map이랑 같이 쓰면 더 코드를 줄일 수 있다.

 

map함수를 쓸때, 함수를 정의해준다는 약간의 불편함이 여전히 있었다.

그런데 Lambda를 쓴다면?

 

문자열의 순서를 바꿔주고 싶다. 만약 map 함수를 쓰면 아래처럼 작성할 것이다.

def rev(a):
	return a[ : : -1]
#함수를 선언해준다.

bts=['v','jin','jk','jimin','jhope','rm','suga']

list(map(rev,bts))
#['v', 'nij', 'kj', 'nimij', 'epohj', 'mr', 'agus']

map(적용할 함수, 적용될 리스트) 부분에서, 적용할 함수를 lambda로 임시로 선언해주면 따로 함수를 선언하는 수고를 덜 수 있다.

bts=['v','jin','jk','jimin', 'jhope','rm','suga']

list(map(lambda a:a[ : : -1], bts))
#a에 대해서, a[ : : -1]를 실행할것이다. 어디에? bts라는 리스트에.

#['v', 'nij', 'kj', 'nimij', 'epohj', 'mr', 'agus']

 

혹시 몰랐다면, slicing에서 알면 좋은 것은 세번째 값이 음수이면 거꾸로 실행된다는 점이다.

bts='bts'

bts[ : :-1]
#'stb'

#원래라면 처음부터 끝까지 한칸씩 띄어 반환하니까
bts[ : : 1]
#'bts'

 

🤐 Zip

Zip은 같은 위치에 있는 값을 조합해서 튜플을 만든다.

Zip은 Map과 마찬가지로, iterable object (list, str, tuple) 모두 적용가능하다.

Zip을 잘만쓰면, 여러줄로 처리할 일을 한줄로 처리 할 수 있다.

list(zip(['v','jin','jimin','jk','jhope','rm','suga'],[1,2,3,4,5,6,7]))
#[('v', 1), ('jin', 2), ('jimin', 3), ('jk', 4), ('jhope', 5), ('rm', 6), ('suga', 7)]

셋 이상의 조합도 가능하다.

list(zip('abc', (1,2,3), ['one', 'two', 'three']))
#[ ('a',1,'one'), ('b',2,'two'), ('c',3,'three') ]

 


출처

윤성우의 열혈 파이썬 중급편

반응형

'developStudy' 카테고리의 다른 글

[Python] Sum  (0) 2021.09.11
[Python] Range  (0) 2021.09.11
[Javascript] 상도덕편 🚮  (0) 2021.02.16
앱 버전 쓰는 방법 (Semantic Versioning)  (0) 2021.01.19
[Flutter] Dart 기본 중에 기본 #변수 #함수 #클래스  (0) 2021.01.13

댓글