멋쟁이 사자처럼/그 외

Python _ 'map( )' 함수 이해하기

니츄 2023. 1. 5. 16:49

 

 

* map( ) 함수의 기본 문법

 : map ( function , iterable )

-function : 함수

-iterable : 반복 가능한 자료형 (list, tuple 등)

 

=> 즉, map ( 적용시킬 함수 , 적용할 값들)

 


 

 

* map( ) 함수를 사용했을 때와 사용하지 않았을 때의 코드 비교하기

 : 우리가족 나이 list에 값을 하나씩 더해서 올해 나이 list를 만드는 작업.

myFamily = [58, 54, 29, 26]


# 1. for문 이용하기

result1 = []
for val in myFamily:
	result1.append(val +1)

print(f'result1 : {result1}')



# 2. map( )함수 이용하기

def add_one(n):
	return n + 1

result2 = list(map(add_one, myFamily))
print(f'result2 : {result2}')
result1 : [59, 55, 30, 27]
result2 : [59, 55, 30, 27]

1. for문 사용 : 하나하나 리스트 요소에 접근하여 계산함, 또 append 해주어야함.

2. map()사용: 요소에 적용할 함수 하나만 넘겨주면 자동으로 리스트를 함수에 적용함. 그걸 list로 형변환만 하면 됨.

 

 


 

* map( )함수 Quiz 다시 풀어보기

: map( ) 함수 직접 구현해보기

# 문제


names1 = ['kim python(23)', 'lee notebook(32)', 'kim macbook(47)']
names2 = ['kim py(33)', 'lee note(52)', 'kim mac(87)']

def ages(*args):
    return [data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')' for data in args]

def map_func():
    # TO DO

솔직히 못 풀겠다.

내가 이해한건 def ages 함수 한 줄 뿐..

# 강사님 풀이

names1 = ['kim python(23)', 'lee notebook(32)', 'kim macbook(47)']
names2 = ['kim py(33)', 'lee note(52)', 'kim book(87)']


def ages1(data):
    return data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')'

def ages2(*args):   
    return [data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')' for data in args]
    
def map_func(func, *args):
    return [func(value) for value in args[0]]
print(map_func(ages1, names1))

def map_func(func, *args):
    # print(args)
    result = []
    for data in zip(*args): # zip(names1, names2)
        # print(data)
        result.append([func(value)[0] for value in data])
    return result

print(map_func(ages2, names1, names2))
['kim python(20)', 'lee notebook(30)', 'kim macbook(40)']
[['kim python(20)', 'kim py(30)'], ['lee notebook(30)', 'lee note(50)'], ['kim macbook(40)', 'kim book(80)']]

너무 어려웡.. 오늘 강의시간 끝나면 울어야징