본문 바로가기
개발 이야기/파이썬

[파이썬] 리스트 컴프리헨션 마무리하기: 주의사항과 성능 최적화 (3/3) 마무리편

by AI 동키 2023. 4. 8.
반응형

이번 포스트에서는 리스트 컴프리헨션의 주의사항과 성능 최적화 방법을 다룹니다. 또한, 마무리로 리스트 컴프리헨션의 장점을 정리하고 파이썬 스타일 가이드에 대해 간략하게 소개합니다.

앞에서 우리는 리스트컴프리헨션의 기본과 응용에 대해 알아봤습니다.

[파이썬] 리스트컴프리헨션?? 이거 모르면 파이썬 초보. (1/3) 기초편

[파이썬] 리스트컴프리헨션 응용하기: 실용적인 예제들로 더 깊게 이해하기 (2/3) 응용편

이번에는 리스트컴프리헨션 마지막 시리즈인 리스트 컴프리헨션 사용 주의사항과 성능 최적화에 대한 내용입니다.

 

리스트 컴프리헨션의 주의사항

 

가독성 유지를 위한 코드 작성

리스트 컴프리헨션은 코드를 간결하게 작성할 수 있지만, 복잡한 로직을 사용하게 되면 가독성이 떨어질 수 있습니다. 따라서, 가능한 한 간결하고 이해하기 쉬운 코드를 작성하는 것이 중요합니다.

# 가독성이 좋지 않은 예
result = [(x, y) for x in range(5) if x % 2 == 0 for y in range(5) if y % 2 == 1]

# 가독성이 좋은 예
result = [
    (x, y)
    for x in range(5) if x % 2 == 0
    for y in range(5) if y % 2 == 1
]

 

성능 최적화와 메모리 효율

리스트 컴프리헨션을 사용하면 코드가 간결해지지만, 때로는 성능이나 메모리 효율이 저하될 수도 있습니다. 이럴 때는 생성자 표현식(generator expression)을 사용하여 메모리 사용량을 줄일 수 있습니다.

# 리스트 컴프리헨션
squares = [x ** 2 for x in range(1000000)]

# 생성자 표현식
squares_generator = (x ** 2 for x in range(1000000))

생성자 표현식은 필요할 때마다 값을 생성하므로 메모리 사용량이 줄어듭니다. 하지만 반복 작업의 속도가 조금 느려질 수 있으므로 상황에 따라 적절한 방법을 선택해야 합니다.

생성자 표현식이 갑자기 튀어나와서 당황하셨나요? 생성자 표현식에 대해 좀 더 설명 드리겠습니다.

생성자 표현식(Generator Expression)은 리스트 컴프리헨션과 매우 유사하지만, 대괄호 대신 괄호를 사용하며 결과를 리스트가 아닌 생성자 객체로 반환합니다. 이렇게 하면 메모리 사용량을 줄일 수 있습니다. 생성자 객체는 한 번에 한 요소씩 순회하며, 전체 리스트를 메모리에 저장하지 않습니다. 이는 큰 데이터를 처리할 때 유용합니다.

예를 들어, 0부터 1000000까지의 정수 중 짝수를 순회하는 생성자 표현식은 다음과 같습니다.

even_numbers = (x for x in range(1000001) if x % 2 == 0)

이제 even_numbers는 생성자 객체이며, for 문을 사용하여 순회할 수 있습니다.

for number in even_numbers:
    print(number)

생성자 표현식은 메모리를 효율적으로 사용할 수 있지만, 생성자 객체는 한 번만 순회할 수 있다는 한계가 있습니다. 이러한 특성 때문에, 생성자 표현식은 일회성 작업에 적합하며, 여러 번 반복해서 사용해야 하는 경우에는 리스트 컴프리헨션을 사용하는 것이 좋습니다.

또한, 생성자 표현식은 함수의 인자로 전달될 때 괄호를 생략할 수 있습니다.

sum_of_squares = sum(x * x for x in range(1, 11))
print(sum_of_squares)  # 출력: 385

이 예제에서는 sum 함수에 생성자 표현식을 전달하여 1부터 10까지의 제곱의 합을 계산했습니다.

생성자 표현식을 사용하면 리스트 컴프리헨션과 유사한 표현을 작성할 수 있으면서, 메모리 사용량을 줄이고 처리 속도를 향상시킬 수 있습니다. 큰 데이터를 다루는 경우, 생성자 표현식을 사용하는 것을 고려해 보세요.

 

리스트 컴프리헨션의 장점 정리

리스트 컴프리헨션은 다음과 같은 장점이 있습니다.

  • 코드를 간결하게 작성할 수 있습니다.
  • 반복문에 비해 실행 속도가 빠를 수 있습니다.
  • 파이썬스러운(Pythonic) 코드를 작성할 수 있습니다.

 

파이썬 스타일 가이드에 대한 간략한 소개

파이썬에는 일관된 코드 스타일을 유지하기 위한 가이드인 PEP 8이 있습니다. PEP 8을 따르면 코드가 더 깔끔하고 가독성이 좋아지며, 다른 개발자들과 협업할 때 코드를 이해하기 쉬워집니다. 리스트 컴프리헨션을 사용할 때에도 PEP 8의 스타일 가이드를 따르는 것이 좋습니다.

예를 들어, 리스트 컴프리헨션 내에서 여러 줄로 나누어 작성할 경우, 각 줄의 시작 부분에 공백을 추가하여 코드를 정렬해야 합니다.

result = [
    (x, y)
    for x in range(5) if x % 2 == 0
    for y in range(5) if y % 2 == 1
]

 

이상으로 리스트 컴프리헨션에 대한 내용을 마무리합니다. 리스트 컴프리헨션을 사용하면 간결하고 파이썬스러운 코드를 작성할 수 있지만, 가독성과 성능 최적화를 위해 주의사항을 지켜야 합니다. 또한 파이썬 스타일 가이드를 참고하여 코드를 작성하면 더욱 깔끔하고 일관성 있는 코드를 작성할 수 있을 것입니다.

 

반응형

댓글