본문 바로가기

Programming

파이썬(Python) 기초 : lambda, map, filter, zip 함수

 

람다(lambda) 함수

 

람다(lambda) 함수는 파이썬에서 간단한 익명 함수(Anonymous Functions)를 생성하는 데 사용됩니다.

즉, 간단한 식의 형태로 함수를 한 줄로 간결하게 표현할 수 있습니다. 주로 함수가 필요한 곳에 일회성으로 사용됩니다.

 

1. 람다 함수의 구문 (Syntax)
lambda arguments: expression
  • lambda: 람다 함수를 정의하는 키워드입니다.
  • arguments: 함수의 매개변수(parameter)를 나타냅니다. 0개 이상의 매개변수를 사용할 수 있습니다.
  • expression: 함수의 반환값을 계산하는 표현식입니다.
2. 람다 함수의 예시
# 두 수를 더하는 일반 함수
def adder (a, b):
	return a + b
print(add(3, 5))  #출력: 8

# 두 수를 더하는 람다 함수
add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

# 제곱을 계산하는 람다 함수
square = lambda x: x ** 2
print(square(4))  # 출력: 16

# 리스트의 요소를 제곱하는 람다 함수와 map() 함수의 조합
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  # 출력: [1, 4, 9, 16, 25]

 

3. 람다 함수의 특징

 

  • 익명 함수(Anonymous Functions): 함수의 이름이 없으며 한 줄로 표현됩니다.
  • 간결함: 코드가 간결하고 가독성이 좋습니다.
  • 일회성 사용: 주로 한 번만 사용되는 간단한 함수를 정의할 때 사용됩니다.

4. 람다 함수와 기존 함수의 차이점

 

  • 이름의 유무: 람다 함수는 이름이 없으며 익명 함수로 정의됩니다.
  • 문장의 한계: 람다 함수는 표현식(expression)만 포함할 수 있으며 문장(statements)을 포함할 수 없습니다.
  • 지역 변수: 람다 함수는 자신의 영역(scope)에서만 정의된 변수를 사용할 수 있습니다.

람다 함수는 간단한 함수를 정의할 때 유용하게 사용되며, 특히 함수가 필요한 곳에 간편하게 적용될 수 있습니다. 
그러나 복잡한 함수의 경우에는 일반적인 함수 정의가 더욱 적합할 수 있습니다.


맵(map) 함수

 

맵(Map) 함수는 파이썬에서 순회 가능한(iterable) 객체(예: 리스트, 튜플, 세트 등)의 각 요소에 대해 특정 함수를 적용하여 새로운 iterable 객체를 생성합니다. 이러한 작업은 일반적으로 반복문을 사용하여 요소를 하나씩 처리하는 것보다 더 간단하고 효율적입니다.

 

1. 맵함수 구문(Syntax)
map(function, iterable1, iterable2, ...)
  • function: 적용할 함수를 나타냅니다.
  • iterable1, iterable2, ...: 함수가 적용될 요소들의 집합을 나타냅니다. 
    여러 개의 iterable 객체를 동시에 전달할 수 있습니다.
2. 맵함수의 예시
# 리스트의 각 요소를 제곱하는 함수
def square(x):
    return x ** 2

# 맵 함수를 사용하여 리스트의 각 요소를 제곱
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
print(list(squared_numbers))  # 출력: [1, 4, 9, 16, 25]

 

람다 함수와 맵 함수를 조합하여 위의 예시를 간결하게 표현할 수도 있습니다

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x ** 2, numbers)
print(list(squared_numbers))  # 출력: [1, 4, 9, 16, 25]

 

3. 맵함수의 특징

 

맵 함수는 주로 함수를 인자로 받는 함수(functional programming)에서 사용되며, 다음과 같은 특징을 가집니다:

 

3-1 각 요소에 함수 적용

 

맵 함수는 주어진 함수를 각 요소에 적용하여 새로운 iterable 객체를 반환합니다. 예를 들어, 주어진 리스트의 각 요소를 제곱하는 경우:

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x ** 2, numbers)

 

위 예시에서 lambda x: x ** 2는 각 요소를 제곱하는 람다 함수입니다. 맵 함수는 이 함수를 numbers 리스트의 각 요소에 적용하여 새로운 iterable 객체를 반환합니다.

 

3-2 여러 개의 iterable 객체 동시 처리


맵 함수는 여러 개의 iterable 객체를 동시에 처리할 수 있습니다. 이때, 각 iterable 객체의 요소가 순서대로 함수에 전달되어 처리됩니다. 예를 들어, 두 리스트의 요소를 더하는 경우:

numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
sums = map(lambda x, y: x + y, numbers1, numbers2)

 

위 예시에서 lambda x, y: x + y는 두 개의 인자를 받아 더하는 함수입니다. 

맵 함수는 numbers1과 numbers2의 요소를 하나씩 쌍(pair)으로 묶어 이 함수에 전달하여 각 요소를 더한 결과를 새로운 iterable 객체로 반환합니다.

 

3-3 반환값

 

맵 함수는 적용된 함수를 각 요소에 적용한 결과를 담은 iterator(반복자) 객체를 반환합니다. 따라서 필요에 따라 리스트나 튜플 등으로 변환하여 사용할 수 있습니다. 일반적으로는 list() 함수를 사용하여 리스트로 변환합니다.

result_list = list(sums)

 

맵 함수는 함수형 프로그래밍 스타일에서 자주 사용되며, 코드의 가독성과 유지보수성을 향상시키는 데 유용합니다.

위에서 설명한 맵 함수에 대해 추가로 설명드리면, 맵 함수는 함수형 프로그래밍 스타일에서 많이 사용됩니다. 함수형 프로그래밍은 상태 변경을 피하고, 함수를 조합하고 변환하여 작업을 수행하는 패러다임입니다. 맵 함수는 함수형 프로그래밍의 핵심 개념 중 하나인 고차 함수(higher-order function)입니다. 여기서 고차 함수란 함수를 인자로 받거나 함수를 반환하는 함수를 말합니다.

또한 맵 함수는 다른 함수들과 함께 조합하여 사용될 수 있습니다. 예를 들어, 맵 함수를 filter() 함수와 함께 사용하여 조건에 맞는 요소들만을 걸러낼 수 있습니다.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)

 

위 코드는 주어진 리스트에서 짝수만을 걸러내는 예시입니다. 먼저 filter() 함수를 사용하여 주어진 조건을 만족하는 요소들을 걸러낸 후, 맵 함수를 사용하여 각 요소에 대해 특정 함수를 적용할 수 있습니다. 이처럼 맵 함수는 함수형 프로그래밍 스타일에서 다양한 용도로 활용될 수 있습니다.


필터(filter) 함수

 

필터(Filter) 함수는 파이썬의 내장 함수 중 하나로, 주어진 순회 가능한(iterable) 객체(예: 리스트, 튜플, 세트 등)에서 특정 조건을 만족하는 요소들을 걸러내는 데 사용됩니다. 이러한 작업은 반복문을 사용하여 요소를 하나씩 확인하고 조건을 검사하여 원하는 요소를 추출하는 것보다 간단하고 효율적으로 수행할 수 있습니다.

 

1. 필터 함수의 구문(Syntax)
filter(function, iterable)
  • function: 각 요소에 적용할 함수(조건 함수)를 나타냅니다. 이 함수는 True 또는 False를 반환해야 합니다.
  • iterable: 함수가 적용될 요소들의 집합을 나타냅니다.
2. 필터 함수의 예시
# 리스트에서 짝수를 걸러내는 함수
def is_even(x):
    return x % 2 == 0

# 필터 함수를 사용하여 리스트에서 짝수를 걸러냄
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = filter(is_even, numbers)
print(list(even_numbers))  # 출력: [2, 4, 6, 8, 10]

 

위 예시에서 is_even() 함수는 주어진 숫자가 짝수인지를 판별하는 함수입니다. 필터 함수는 이 함수를 리스트의 각 요소에 적용하여 짝수인 요소들을 걸러냅니다.

# 일반함수
target = [1,2,3,4,5,6,7,8,9,10]
def is_even(n):
	return True if n % 2 == 0 else False
list(filter(is_even,target))

# 필터함수 사용
list(filter(lambda x: True if x % 2 == 0 else Flase, target)
3. 필터 함수의 특징
  • 조건 함수: 필터 함수는 각 요소에 적용할 조건 함수를 인자로 받습니다. 이 함수는 True 또는 False를 반환해야 합니다.
  • 새로운 iterable 반환: 필터 함수는 조건을 만족하는 요소들로 이루어진 새로운 iterable 객체를 반환합니다.
  • 기존 iterable 변경 없음: 필터 함수는 기존 iterable 객체를 변경하지 않고 새로운 iterable 객체를 반환합니다.
4. 필터 함수의 활용


필터 함수는 데이터를 정제하거나 특정 조건에 맞는 요소들을 추출하는 데 유용합니다. 또한 맵 함수와 함께 조합하여 사용하여 보다 다양한 작업을 수행할 수 있습니다. 

예를 들어, 리스트의 요소 중에서 특정 범위에 속하는 요소들을 걸러내는 경우:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_numbers = filter(lambda x: x >= 5 and x <= 8, numbers)
print(list(filtered_numbers))  # 출력: [5, 6, 7, 8]

 

위 코드에서는 lambda 함수를 사용하여 주어진 조건에 맞는 요소들을 걸러냅니다.
필터 함수는 데이터를 필요에 맞게 정제하거나 추출할 때 매우 유용하며, 함수형 프로그래밍 스타일에서 자주 사용됩니다.


zip 함수

 

zip 함수는 파이썬의 내장 함수 중 하나로, 여러 개의 순회 가능한(iterable) 객체(예: 리스트, 튜플, 세트 등)를 병렬로 순회하여 각 객체의 요소들을 묶어 새로운 튜플의 집합을 생성합니다.

이는 여러 개의 데이터를 하나로 묶어 처리하는 데 유용합니다.

 

1. zip 함수의 구문(Syntax)
zip(iterable1, iterable2, ...)

 

  • iterable1, iterable2, ...: 묶을 요소들의 집합을 나타냅니다. 여러 개의 iterable 객체를 전달할 수 있습니다.

zip 함수는 가장 짧은 iterable 객체의 길이에 맞춰 결과를 생성합니다. 따라서 zip 함수의 반환값은 가장 짧은 iterable 객체의 길이에 맞춰진다는 점에 유의해야 합니다.

 

2. zip 함수의 예시
# 두 개의 리스트를 병렬로 묶기
numbers = [1, 2, 3, 4, 5]
letters = ['a', 'b', 'c', 'd', 'e']
zipped_data = zip(numbers, letters)
print(list(zipped_data))  # 출력: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]

 

위 예시에서 zip 함수는 두 개의 리스트인 numbers와 letters를 병렬로 묶어 각 리스트의 동일한 인덱스에 있는 요소들을 쌍(pair)으로 묶어줍니다. 결과로 나오는 튜플들의 집합은 각 리스트의 요소들이 순서대로 묶여 있습니다.

 

3. zip 함수의 활용


zip 함수는 여러 개의 데이터를 함께 처리해야 할 때 유용하게 사용됩니다. 

예를 들어, 두 개의 리스트를 묶어 사전으로 변환하는 경우:

keys = ['name', 'age', 'city']
values = ['Alice', 30, 'New York']
person_dict = dict(zip(keys, values))
print(person_dict)  # 출력: {'name': 'Alice', 'age': 30, 'city': 'New York'}

 

위 코드에서는 zip 함수를 사용하여 keys와 values 리스트를 묶어 각 요소들을 키-값 쌍으로 묶은 후, dict() 함수를 사용하여 딕셔너리로 변환하였습니다.

zip 함수는 또한 여러 개의 iterable 객체를 동시에 순회할 때 유용하게 사용될 수 있습니다. 예를 들어, 두 개의 리스트를 순회하면서 동일한 인덱스에 있는 요소들을 처리하는 경우에 유용합니다.

 

4. zip 함수의 주의사항

 

zip 함수는 각 iterable 객체에서 동일한 인덱스에 있는 요소들을 묶어 튜플을 생성합니다.

따라서 각 iterable 객체의 길이가 다를 경우, 결과는 가장 짧은 iterable 객체의 길이에 맞춰집니다.
zip 함수의 반환값은 iterator(반복자) 객체입니다. 따라서 필요에 따라 리스트나 튜플 등으로 변환하여 사용할 수 있습니다.
zip 함수는 여러 개의 데이터를 병렬로 처리하거나 묶어서 다양한 작업을 수행할 때 유용하게 사용됩니다.