Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 람다 함수로 피보나치 수열 생성하기 – map과 reduce 활용법

피보나치 수열은 자연 현상을 설명하는 데 널리 알려진 대표적인 수학적 수열입니다. 이 수열은 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를 쓰는 두 번째 방법은 간결한 한 줄 코드로 구현할 수 있다는 차이가 있습니다. 상황에 맞게 선택하여 활용해 보세요.