List Comprehension
Python 의 list comprehension은 리스트를 생성하는 가장 쉽고 효율적인 방법 중 하나입니다. 데이터 분석을 수행할 때 list 를 사용하여 데이터를 수정하고 계산해야 할 때가 있는데, list comprehension은 이를 수월하게 할 수 있도록 도와줍니다. 예를 들어 다음과 같이 시간대별 섭씨 온도를 list 로 저장하였다고 가정해 봅시다.
temperatures = [-5, 29, 26, -7, 1, 18, 12, 31]
이 때, 실험실 온도계가 관측치보다 20 도 낮게 보고되었단 걸 뒤늦게 알게 되었다고 합시다. 이를 반영하기 위해 새로운 리스트를 생성할 수 있을 것입니다.
temperatures = [15, 49, 46, 13, 21, 38, 32, 51]
그러나 이런 방법은 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 만약 우리가 보유한 데이터의 양이 많을수록 더욱 실용적이지 못 할 것입니다. Python 의 list comprehension을 활용하면 위와 동일한 기능을 아주 간단하게 구현할 수 있습니다.
temperatures = [-5, 29, 26, -7, 1, 18, 12, 31]
temperatures_adjusted = [ temp + 20 for temp in temperatures]
# temperatures_adjusted은 [15, 49, 46, 13, 21, 38, 32, 51]가 됩니다
위 코드는 다음과 같은 과정으로 진행됩니다.
temperatures
변수를 취합니다.- 각 원소들을
temp
라고 이름짓습니다. temp + 20
값을 새로운 배열temperatures_adjusted
에 저장합니다.- 1-3 단계를
temperatures
의 모든 원소에 대해서 반복합니다.
만약 list comprehension 을 통해 어떠한 연산도 수행하지 않는다면 이는 원본 배열과 동일한 배열을 복사합니다.
temperatures = [-5, 29, 26, -7, 1, 18, 12, 31]
temperatures_new = [ temp for temp in temperatures]
# temperatures_new은 temperature과 동일합니다
나아가 복잡한 연산을 수행할 수도 있습니다.
temperatures = [-5, 29, 26, -7, 1, 18, 12, 31]
temperatures_F = [(9.0/5.0) * temp + 32 for temp in temperatures]
# temperatures_F는 화씨 온도 [23.0, 84.2, 78.8, 19.4, 33.8, 64.4, 53.6, 87.8]를 저장합니다
Lambda Function
Python 에서 함수(Function)는 여러 input 을 받아서 modify 한 후 output 을 반환하는 호출가능한 객체(Object)입니다. Lambda function은 이러한 함수를 inline 으로 표현한 것을 말합니다. 간단한 예제를 봅시다.
add_two = lambda num : num + 2
위 labmda function을 호출한 결과는 다음과 같습니다.
print(add_two(3)) # 5
print(add_two(100)) # 102
print(add_two(-2)) # 0
lambda syntax 를 break down 해봅시다.
- 익명 함수가
add_two
라는 변수에 할당됩니다. lambda
키워드는 해당 변수가 lambda function 이라는 것을 선언합니다.def
로 함수를 선언하는 것과 비슷합니다.num
이라는 파라미터를add_two
가 취합니다.num
에2
를 더한 값을 반환합니다. 일반 함수에서는return
키워드를 명시해줘야 하지만 lambda function은return
키워드가 불필요합니다.
이해를 돕기 위해 예를 하나 더 들어봅시다. 주어진 문자열이 "This is the master string"
의 부분문자열인지를 확인하는 lambda function을 만들어 봅시다.
is_substring = lambda str : str in "This is the master string"
위 lambda function을 호출한 결과는 다음과 같습니다.
print(is_substring('I')) # False
print(is_substring('am')) # False
print(is_substring('the')) # True
print(is_substring('master')) # True
lambda function에 조건문을 취해서 특정 조건을 만족해야만 특정 결과를 반환할 수 있도록 할 수 있습니다.
check_if_A_grade = lambda grade : 'Got an A!' if grade >= 90 else 'Did not get an A...'
Javascript 의 삼항 연산자(ternary operator)와 비슷한 느낌이 듭니다 :)
Reivew
오늘 공부한 Python list comprehension 과 lambda function에 대해서 정리하는 시간을 가져보았습니다. Python 은 공부하면 할 수록 더 재미있는 언어인 것 같습니다 😀.