lambda expresion

joon_1592·2020년 12월 28일
0

파이썬 자료구조

목록 보기
4/7

stackoverflow에서 python 답변을 보다보면 lambda를 많이 쓴다.
C/C++에 익숙한 나에겐 아직도 python을 C++처럼 쓰게 되는데 이게 무슨소리인지 모르겠다. 그래서 공부해보자! (사실 C++도 람다식을 지원한다)

anonymous function, lambda expression이라고 불린다.

  • lanbda [인자] : [표현식]

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
  1. 처음에 정수를 문자열로 변환할 때 C++처럼 짰었다. map()을 이용하면 한줄에 할 수 있다.
# 이건 너무 C++처럼 작성했다.
for n in numbers:
	L.append(str(n))

# map 없이 이렇게도 할 수 있다. 리스트의 생성과 동시에 저장도 가능.
L = [str(n) for n in numbers]
  1. join()은 list를 구분자를 포함하여 string으로 만든다.
answer = ''.join(L) # 구분자는 ''이므로 그대로 이어붙인다.

join()의 역연산은 split()이다. string을 list로 만든다.
주로 입력을 받을 때 공백을 제거하기 위해 사용된다.

profile
공부용 벨로그

0개의 댓글