[파이썬] 리스트 컴프리헨션과 제너레이터

리스트 컴프리헨션과 제너레이터는 파이썬에서 매우 유용한 기능들입니다. 이 두 가지 기능은 코드를 더욱 간결하고 효율적으로 작성할 수 있는 방법을 제공해줍니다. 이번 포스트에서는 리스트 컴프리헨션과 제너레이터가 어떻게 동작하는지에 대해 알아보고, 어떻게 활용할 수 있는지 예시 코드와 함께 살펴보겠습니다.

리스트 컴프리헨션

리스트 컴프리헨션은 새로운 리스트를 생성하기 위해 기존 리스트의 요소들을 변형하거나 필터링하는 간단하고 강력한 방법입니다. 말 그대로 리스트 컴프리헨션은 한 줄의 코드로 리스트를 생성할 수 있는 기능을 제공합니다.

예를 들어, 1부터 10까지의 숫자 중에서 짝수만을 포함하는 리스트를 생성해보겠습니다.

even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print(even_numbers)  # 출력: [2, 4, 6, 8, 10]

위 코드에서 [x for x in range(1, 11) if x % 2 == 0] 부분이 리스트 컴프리헨션입니다. 이를 통해 1부터 10까지의 숫자 중에서 짝수만 포함하는 리스트를 생성할 수 있습니다.

리스트 컴프리헨션은 조건문(if 문)을 사용하여 리스트를 필터링할 수도 있습니다. 위의 예시에서는 x % 2 == 0 조건을 추가하여 짝수만을 리스트에 포함시켰습니다.

제너레이터

제너레이터는 이터레이터를 생성하기 위한 간편한 방법을 제공합니다. 이터레이터는 값을 한 번에 하나씩 반환하는 객체입니다. 제너레이터는 함수 정의와 유사한 문법을 가지고 있지만, return 문 대신에 yield 문을 사용합니다.

제너레이터를 이용하면 대용량의 데이터 처리와 같이 메모리를 효율적으로 사용할 수 있습니다. 예를 들어, 1부터 1000000까지의 숫자를 생성하는 제너레이터를 사용해보겠습니다.

def number_generator(n):
    i = 1
    while i <= n:
        yield i
        i += 1

numbers = number_generator(1000000)
print(next(numbers))  # 출력: 1
print(next(numbers))  # 출력: 2
print(next(numbers))  # 출력: 3
# ...

위 코드에서 number_generator 함수는 제너레이터입니다. 이 함수가 호출될 때마다 yield 문을 만날 때까지 실행됩니다. 제너레이터 객체를 생성한 후에는 next 함수를 사용하여 값을 하나씩 가져올 수 있습니다.

제너레이터를 사용하면 매번 모든 값을 한꺼번에 계산하지 않아도 됩니다. 이는 메모리 사용량을 줄이고, 계산 속도를 향상시킬 수 있는 장점이 있습니다.

마무리

리스트 컴프리헨션과 제너레이터는 파이썬에서 유용하게 사용되는 기능들입니다. 리스트 컴프리헨션을 사용하면 한 줄의 코드로 간결하게 새로운 리스트를 생성할 수 있으며, 제너레이터는 이터레이터를 효율적으로 생성할 수 있는 강력한 방법입니다.

이러한 기능들은 파이썬 코드를 더욱 간결하고 가독성 있게 만들어주며, 코드의 실행 효율성을 향상시키는데 도움을 줍니다. 앞으로 자주 활용될 수 있는 기능들이므로, 많은 연습과 활용을 통해 숙달해보시기 바랍니다.