stackoverflow에서 python 답변을 보다보면 lambda를 많이 쓴다.
C/C++에 익숙한 나에겐 아직도 python을 C++처럼 쓰게 되는데 이게 무슨소리인지 모르겠다. 그래서 공부해보자! (사실 C++도 람다식을 지원한다)
anonymous function, lambda expression이라고 불린다.
python에서 lambda systax는 다음과 같다
lambda arg1, arg2, arg3, ... : <operation>
arg1, arg2, arg3, ...로 특정 연산을 하면 된다.
add라는 람다식을 만들면 다음처럼 동작한다.
add = lambda a : a + a
ret = add(20) # ret = 40
예제1. 문자열을 길이를 기준으로 오름차순 정렬
L = ['house', 'car', 'bike']
L.sort(key=lambda x : len(x))
print(L) # ['car', 'bike', 'house']
예제2. 가장 큰 수
숫자를 앞에서부터 비교하여 앞의 수가 더 큰 수가 먼저 오게 한다.
예제의 3, 30, 34를 비교하면 34 > 3 > 30 으로 정렬한다.
정수로 이런 비교를 하려면 나누고 별짓을 다 해야한다. 복잡하고 내가 이해할 수 없는 코드만 생길뿐이다.
문자열의 아스키코드로 비교하면 쉽다.
# 정수를 문자열로 변환.
L = list(map(str, numbers))
# 문자열 비교로 내림차순 정렬
# 문자열을 3배하여 단순히 비교하는 아이디어!
L.sort(key = lambda x : x * 3, reverse = True)
# 문자열을 이어붙이기
answer = ''.join(L)
return answer
# 이건 너무 C++처럼 작성했다.
for n in numbers:
L.append(str(n))
# map 없이 이렇게도 할 수 있다. 리스트의 생성과 동시에 저장도 가능.
L = [str(n) for n in numbers]
answer = ''.join(L) # 구분자는 ''이므로 그대로 이어붙인다.
join()의 역연산은 split()이다. string을 list로 만든다.
주로 입력을 받을 때 공백을 제거하기 위해 사용된다.