😇 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 |
댓글