map(function, *iterables)
map 함수는 입력으로 들어오는 iterable 들의 각 요소를 인자로 삼아 function 을 적용해주는 함수이다.
보통 알고리즘 문제를 풀면 한 줄로 들어오는 입력을 정수로 치환해 사용해야 하는 경우가 많은데 이 때 map 을 사용할 수 있다.
numbers = list(map(int, input().split()))
만약 여러 iterable 객체들을 입력으로 주면 아래와 같이 동작한다
map(func, iter1, iter2, iter3)
->
func(iter1[0], iter2[0], iter3[0])
func(iter1[1], iter2[1], iter3[1])
...
map 함수의 특징 중 하나로 lazy evaluation 이 있는데 map 함수가 map 객체를 반환하는 시점에는 실제로 fucn 함수의 호출이 일어나지 않고 후에 map 객체를 필요로 하는 곳이 있으면 그 때 func 함수의 호출이 일어난다는 점이다.
def func(a, b):
print(a, b)
arr1 = [1, 2, 3, 4]
arr2 = [5, 6, 7, 8]
map(func, arr1, arr2) # 아무런 값도 출력되지 않음
list(map(func, arr1, arr2))
# 1 5
# 2 6
# 3 7
# 4 8
filter
filter 함수는 iterable 객체의 요소 중 정의한 조건을 만족하는 값만 걸러주는 함수이다.
filter 또한 lazy evaluation 이 가능하다는 특징이 있다.
사용 예시는 다음과 같다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 홀수만 거르기
print(list(filter(lambda x : x % 2, numbers)))
하나의 iterable 객체에서 요소를 필터링 해주는 함수이므로 map 함수와는 달리 iterable 객체 여러 개를 집어넣을 수 없다.
zip
zip 함수는 iterable 객체들을 받아 같은 인덱스 요소 끼리 튜플로 묶어주는 함수이다.
print(list(zip([1, 2, 3], [4, 5, 6])))
# [(1, 4), (2, 5), (3, 6)]
보통 2차원 배열에서 가로 방향이 아닌 세로 방향으로 탐색을 하고 싶을 때도 zip 함수를 사용할 수 있다.
arr = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print(arr) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr2 = list(zip(arr[0], arr[1], arr[2]))
print(arr2) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
'Python' 카테고리의 다른 글
[TIL] Python 3일차 (0) | 2024.01.17 |
---|---|
Non Sequence Type - set, dictionary (0) | 2024.01.16 |
Sequence Type (1) | 2024.01.16 |