"""
해야하는것
1. 주어진 리스트에서 정수를 뽑는다.
2. 1.을 제곱한다.
3. 2.를 출력한다.
조건
lambda와 filter,map을 사용할것 (최소 1번씩 모두 사용해야한다.)
Hint
isinstance(1,int)
구글에서 아래의 문장으로 검색해보세요.
what is isinstance in python?
or
python isinstance 함수
"""
from datetime import datetime
# 미리 주어진 리스트
recycle_bin = [1, 2, "Fastcampus", [], 5, 4, 5.6, "패스트캠퍼스"]
"""
먼저 정수만 뽑아내는 함수와
제곱하는 함수를 만들어보죠.
"""
# 정수추출 함수
def check_integer(x):
"""
입력받은 x를 순회하여 x의 요소들이 정수(int)가 맞는지 확인하고
정수를 list형태로 리턴한다.
"""
# empty list
return_list = []
# 입력받은 x를 순회한다.
for i in x:
# 만약 i의 타입이 int 라면??
if isinstance(i, int):
# return_list에 i를 넣는다.
return_list.append(i)
# else는 없으니까 아무것도 안하겠죠?
# for가 끝나면 return_list를 반환한다.
return return_list
# 정수 제곱함수
def square_int(x):
"""
입력받은 x를 순회하여 x의 요소들을 제곱하여 list형태로 리턴한다.
"""
return_list = []
# 입력받은 x를 순회한다.
for i in x:
# result_list에 i를 제곱하여 넣는다.
return_list.append(i ** 2)
# for가 끝나면 return_list를 반환한다.
return return_list
"""
이번에는 람다와 필터로 정수를 추출해보죠.
"""
use_lambda_and_filter_list = list(filter(lambda x: isinstance(x, int), recycle_bin))
"""
괄호가 많아서 헷갈리지만 산수랑 똑같습니다.
괄호안에 있는것이 제일 먼저 연산됩니다.
제일 안에서부터 차근차근 어떤행위를 하는건지 살펴보세요.
recycle_bin에서 lambda로 요소를 하나씩(한개씩) 넘긴다. -> x를 isinstance(x,int)로 다시 넘긴다. -> isinstance에서 x가 int(정수형)와 "타입이" 같은지 확인한다.
-> filter함수는 특정함수(여기서는 lambda x: isinstance(x,int))를 만족(return True인 경우!)하는 요소만 "남기는" 함수 -> filter에서 남은 요소들을 list로 저장
"""
use_function_list = check_integer(recycle_bin)
"""
이제 주어진 리스트에서 정수만 뽑아내는건 해냈으니
제곱을 해볼까요?
"""
use_map_lambda_list = list(map(lambda x: x ** 2, use_lambda_and_filter_list))
use_function_function_list = square_int(use_function_list)
# 결과 출력
print("함수로 필터한 결과값 : {}\n람다로 필터한 결과값 : {}".format(use_function_list, use_lambda_and_filter_list))
print("함수로 제곱한 결과값 : {}\n맵으로 제곱한 결과값 : {}".format(use_function_function_list, use_map_lambda_list))
#### 번외 (함수와 람다의 연산시간 측정하기) ####
# 함수 동작 전 시간 측정
start_time_function = datetime.now()
square_int(check_integer(recycle_bin))
# 함수 동작 후 시간 측정
end_time_function = datetime.now()
# 람다 동작 전 시간 측정
start_time_lambda = datetime.now()
list(map(lambda x: x ** 2, list(filter(lambda x: isinstance(x, int), recycle_bin))))
# 람다 동작 후 시간 측정
end_time_lambda = datetime.now()
print("함수연산에 걸린 시간 :{}".format(end_time_function - start_time_function))
print("람다연산에 걸린시간 :{}".format(end_time_lambda - start_time_lambda))
컴공스