Map 함수

  • Sequence 자료형(List, Tuple)의 각 원소(element)에 동일한 function을 적용함
  • Python 3 부터는 사용하지 않는 것을 추천하지만, Legacy library 나 다양한 머신러닝 코드에서 여전히 사용중
  • 모든 원소에 함수를 적용하고 싶을 때 자주 사용한다.
  • map( ) 만을 적용한 결과는 값의 주소가 출력되고, list(map( )) 을 같이 사용해주어야 적용된 결과가 출력된다.

 

map(Function_name, List_data)

  1. Function_name = 적용시킬 함수
  2. List_data = Sequence 자료형

 

Ex 1) 기본적인 map 함수 사용 예

ex = [1, 2, 3, 4, 5]
f = lambda x: x ** 2
print(map(f, ex)) # 주소 출력
print(list(map(f, ex)))

<map at 0x10eb2db00>

[2, 4, 6, 8, 10]

 

 

Ex 1-1) map만 사용하여 값을 출력하는 방법

ex = [1, 2, 3, 4, 5]
f = lambda x: x ** 2
print(f, ex)    # map 함수만 적용하면 값의 주소가 출력

for i in map(f, ex):    # for loop을 사용하면 값이 출력
    print(i)

<map object at 0x10f16c9e8>

1

4

9

16

25

 

 

Ex 2) zip 함수와 동일한 결과 출력하기

  • 2개 이상의 Sequence 자료형에 대해 사용할 경우, 같은 인덱스에 있는 원소와 연산한다.
ex = [1, 2, 3, 4, 5]
f = lambda x, y: x + y
print(list(map(f, ex, ex)))

[2, 4, 6, 8, 10]

 

 

Ex 3) lambda 함수 + Filter(if문)

  • lambda 와 Filter를 함께 사용할 때는 List comprehension과는 달리 Filter는 조건을 만족하지 않을 때의 else 값을 반드시 넣어주어야함
# 만족할 때는 제곱, 만족하지 않으면 원래의 값 그대로
ex = [1, 2, 3, 4, 5]
list(map(
    lambda x: x ** 2 if x % 2 == 0 else x,
    ex))

[1, 4, 3, 16, 5]

 

 

Ex 3-1) List comprehension으로 Ex 3) 표현해보기

ex = [1, 2, 3, 4, 5]
result = [i for i in ex if i % 2 == 0 else i]
print(result)

[1, 4, 3, 16, 5]

 

 

'✍🏻Language & FrameWork > Python' 카테고리의 다른 글

[Python for ML] Asterisk  (0) 2024.01.02
[Python for ML] Reduce 함수  (0) 2024.01.01
[Python for ML] Lambda 함수  (0) 2024.01.01
[Python for ML] Zip 함수  (0) 2024.01.01
[Python for ML] Enumerate 함수  (0) 2023.12.30

Lambda 함수

  • 함수 이름 없이, 함수처럼 쓸 수 있는 익명함수
  • 수학의 람다 대수에서 유래함
  • 직관성이 많이 떨어져 Python 3부터는 권장하지 않음. (코테 준비할 때 많이 봤던 기억이..)
  • Legacy library나 다양한 머신러닝 코드에서 여전히 사용중

 

Ex) 각각의 예시

# 더하는 함수 예시
f = lambda x,y: x + y
print(f(1,4))

# 제곱하는 함수 예시
f = lambda x: x**2
print(f(3))

# 나누는 함수 예시
f = lambda x: x/2
print(f(3))

# 바로 사용하기
print((lambda x: x+1)(5))

 

다음의 Map, Reduce 게시글에서 더 사용할 예정이다.

'✍🏻Language & FrameWork > Python' 카테고리의 다른 글

[Python for ML] Reduce 함수  (0) 2024.01.01
[Python for ML] Map 함수  (0) 2024.01.01
[Python for ML] Zip 함수  (0) 2024.01.01
[Python for ML] Enumerate 함수  (0) 2023.12.30
[Python for ML] List Comprehension  (2) 2023.12.30

Zip 함수

  • 두 개의 List 의 같은 인덱스에 위치한 값들을 병렬적으로 추출
  • 벡터 값을 계산할 때 List Comprehension과 함께 사용

 

Ex 1) 병렬적으로 값을 추출 

alist = ['a1', 'a2', 'a3']
blist = ['b1', 'b2', 'b3']

for a, b in zip(alist, blist):
    print(a, b)

a1 b1

a2 b2

a3 b3

 

 

Ex 2) 2개 이상의 Tuple을 같은 index 끼리 묶음

a, b, c = zip((1,2,3), (10,20,30), (100,200,300))
print(a)
print(b)
print(c)

(1, 10, 100)

(2, 20, 200)

(3, 30, 300)

 

 

Ex 3) 각 Tuple의 같은 index를 묶어 합을 list로 변환

result = [sum(x) for x in zip((1,2,3), (10,20,30), (100,200,300)]
print(result)

[111, 222, 333]

Enumerate 함수

  • List의 값(element)을 추출할 때 인덱스 번호를 함께 붙여 추출하는 방법
  • 인덱스 번호 - 값 의 순서
  • 자바에서도 비슷하게 사용

 

Ex 1) List에 있는 값을 인덱스 번호와 함께 추출

for i, v in enumerate(['tic', 'tac', 'toc']):
    print(i, v)

0 tic

1 tac

2 toc

 

 

Ex 2) List에 있는 index 와 값을 unpacking하여 list로 저장

  • mylist에 enumerate 먹이고, 다시 list 먹이면, 원래 값에 인덱스를 포함해서 리스트를 만들 수 있다.
mylist = ["a", "b", "c", "d"]
print(list(enumerate(mylist)))

[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]

 

Ex 3) 문장을 List로 만들고, List의 index와 값을 unpacking하여 dict로 저장

result = {i:j for i, j in enumerate('This blog is a student technology blog.'.split())}
print(result)

{0:'This', 1:'blog', 2:'is', 3:'a', 4:'student', 5:'technology', 6:'blog.'}