피보나치 수열은 자연 현상을 설명하는 데 널리 알려진 대표적인 수학적 수열입니다. 이 수열은 0과 1로 시작하며, 그다음 항부터는 앞선 두 항을 더한 값으로 차례대로 이어집니다. 예를 들어 0, 1, 1, 2, 3, 5, 8, 13처럼 각 항이 직전 두 항의 합으로 구성됩니다.
이 글에서는 파이썬의 람다(lambda) 함수를 활용해 원하는 개수만큼의 피보나치 수열 항을 생성하는 두 가지 방법을 살펴봅니다.
방법 1: sum과 map 함수 함께 사용하기
map 함수는 리스트의 각 요소에 람다 함수를 적용할 때 유용합니다. 여기서는 리스트 슬라이싱 기법을 활용해 직전 두 항의 합을 구하고, range를 사용해 생성할 항의 개수를 관리합니다. 람다 함수 내부에서 리스트 마지막 두 요소(listA[-2:])를 더해 새 항을 계속 추가하는 방식입니다.
예제 코드
def fibonacci(count):
listA = [0, 1]
any(map(lambda _: listA.append(sum(listA[-2:])),
range(2, count)))
return listA[:count]
print(fibonacci(8))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
[0, 1, 1, 2, 3, 5, 8, 13]
방법 2: reduce 함수 활용하기
두 번째 방법은 functools 모듈의 reduce 함수와 람다 함수를 함께 사용합니다. 람다가 누적된 리스트에 마지막 두 항의 합을 반복적으로 추가하며, range로 필요한 항의 개수를 조절해 최종 결과를 얻습니다. 이 방식은 별도의 함수 정의 없이 한 줄의 람다 표현식으로 전체 로직을 처리할 수 있다는 장점이 있습니다.
예제 코드
from functools import reduce fib_numbers = lambda y: reduce(lambda x, _: x + [x[-1] + x[-2]], range(y - 2), [0, 1]) print(fib_numbers(8))
실행 결과
위 코드를 실행하면 동일한 결과를 확인할 수 있습니다.
[0, 1, 1, 2, 3, 5, 8, 13]
마무리
두 방법 모두 람다 함수를 활용한다는 점은 같지만, map을 쓰는 첫 번째 방법은 코드 흐름을 단계별로 이해하기 쉽고, reduce를 쓰는 두 번째 방법은 간결한 한 줄 코드로 구현할 수 있다는 차이가 있습니다. 상황에 맞게 선택하여 활용해 보세요.