[Programming] lambda, map, filter, zip
크기가 큰 데이터를 정제하면서 하나의 작업을 하는 데도 시간이 굉장히 많이 필요한다는 것을 느꼈다. 그래서 검색을 해 가장 효율적인 코드를 찾게 되었고, 그 중 가장 많이 사용하는 코드 네 가지에 대해 정리하였다.
lambda argument: expression
- 함수를 한 줄로 만들어낼 수 있고, 함수를 따로 정의해 저장하지 않기 때문에 메모리를 많이 사용하지 않음
(lambda x, y: x * y)(10, 20)
# 30
map(function_object, iterable1, …)
- list와 같은 iterable한 객체의 모든 element에 해당 함수를 적용
- for 문으로 함수를 돌리는 것보다 훨씬 빠름
- 함수의 매개변수가 두 개일 경우 두 집합을 입력
- map의 결과는 <map>이므로 print하거나 값을 사용하려면 list 형식으로 변경해야 함
-
매개변수가 한 개일 경우
# 데이터 타입 변경 l = list(map(int, ['1', '2', '3]')) print(l) # 1, 2, 3
-
매개변수가 두 개일 경우
# 두 리스트를 사용하여 계산 l = list(map(lambda x, y: x * y, [0, 1, 2, 3], [4, 5, 6, 7])) print(l) #[0, 5, 12, 21]
-
직접 만든 함수를 적용할 경우
# 두 매개변수를 사용하는 함수 def multiply (x, y): return x * y l = list(map(multiply, [0, 1, 2, 3], [4, 5, 6, 7])) print(l) #[0, 5, 12, 21]
filter(function_object, iterable)
- list와 같은 iterable한 객체의 모든 element에 해당 함수를 적용한 후 True에 해당하는 iterable을 리턴
l = [0, 3, 1, 2]
list(filter(lambda x : x < 3, l))
# [0, 1, 2]
zip(*iterables)
- 여러 개의 iterable한 element를 매핑하여 하나의 tuple로 만들어줌
fruit = ['apple', 'orange', 'cherry']
price = [100, 200, 300]
list(zip(fruit, price))
# [('apple', 100), ('orange', 200), ('cherry', 300)]
- 두 리스트를 합칠 때도 사용할 수 있음
a = [1, 2, 3, 4, 5]
b = [0, 1, 2, 3, 4]
list(x*y for x, y in zip(a, b))
# [0, 2, 6, 12, 20]
댓글남기기