Published on

Python list comprehension, lambda

Authors

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]가 됩니다

위 코드는 다음과 같은 과정으로 진행됩니다.

  1. temperatures변수를 취합니다.
  2. 각 원소들을 temp라고 이름짓습니다.
  3. temp + 20값을 새로운 배열 temperatures_adjusted에 저장합니다.
  4. 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 해봅시다.

  1. 익명 함수가 add_two 라는 변수에 할당됩니다.
  2. lambda 키워드는 해당 변수가 lambda function 이라는 것을 선언합니다. def 로 함수를 선언하는 것과 비슷합니다.
  3. num이라는 파라미터를 add_two가 취합니다.
  4. num2를 더한 값을 반환합니다. 일반 함수에서는 return키워드를 명시해줘야 하지만 lambda functionreturn키워드가 불필요합니다.

이해를 돕기 위해 예를 하나 더 들어봅시다. 주어진 문자열이 "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 comprehensionlambda function에 대해서 정리하는 시간을 가져보았습니다. Python 은 공부하면 할 수록 더 재미있는 언어인 것 같습니다 😀.

References