Programming Languages/Python

빅오(O), 파이썬 리스트 컴프리헨션, 제네레이터, 구글 스타일 가이드

Potato_H 2024. 8. 19. 17:26
반응형

1. 빅오(Big-O) 표기법

빅오 표기법이란?

빅오 표기법(Big-O Notation)은 알고리즘의 성능을 분석할 때 가장 널리 사용되는 방법입니다.

 

주어진 알고리즘의 시간 복잡도와 공간 복잡도를 나타내며, 입력 데이터의 크기(n)에 따른 성능 변화를 설명합니다.

 

주로 최악의 경우에 대한 성능을 나타내며, 알고리즘이 얼마나 효율적인지를 평가하는 기준이 됩니다.

 

주요 빅오 표기법

  • O(1): 상수 시간 복잡도. 입력 크기와 관계없이 항상 동일한 시간이 걸립니다.
  • O(log n): 로그 시간 복잡도. 입력 크기가 증가함에 따라 실행 시간이 천천히 증가합니다. 예를 들어, 이진 탐색 알고리즘이 여기에 속합니다.
  • O(n): 선형 시간 복잡도. 입력 크기에 비례하여 실행 시간이 증가합니다.
  • O(n log n): 선형 로그 시간 복잡도. 병합 정렬과 같은 알고리즘이 여기에 속합니다.
  • O(n^2): 이차 시간 복잡도. 입력 크기에 대해 실행 시간이 제곱으로 증가합니다. 대표적인 예는 버블 정렬입니다.

예시: 리스트 탐색

def find_max(nums):
    max_num = float('-inf')  # O(1)
    for num in nums:  # O(n)
        if num > max_num:
            max_num = num
    return max_num  # O(1)

 

위의 예시에서 find_max 함수는 입력 리스트 nums의 최대값을 찾습니다. 이 알고리즘의 시간 복잡도는 O(n)입니다.

 

 

 

2. 리스트 컴프리헨션

리스트 컴프리헨션이란?

리스트 컴프리헨션(List Comprehension)은 파이썬에서 리스트를 생성하는 간결하고 효율적인 방법입니다. 기존 리스트에서 조건에 맞는 요소들만을 추출하거나, 요소를 변형하여 새로운 리스트를 만들 때 유용합니다.

예시: 짝수만 필터링

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in numbers if num % 2 == 0]
# even_numbers: [2, 4, 6]

 

 

3. 제네레이터

제네레이터란?

제네레이터(Generator)는 이터레이터의 일종으로, 한 번에 하나의 값만을 생성하고 필요할 때만 계산을 수행합니다.

 

메모리 효율성을 높이기 위해 사용되며, yield 키워드를 통해 값을 반환합니다.

 

반복이 끝나면 StopIteration 예외를 발생시켜 순회가 종료됩니다.

제네레이터의 특징

  • 지연 평가: 필요할 때마다 값을 생성하며, 전체 데이터를 한 번에 메모리에 로드하지 않습니다.
  • 무한 시퀀스 생성 가능: 제네레이터는 끝이 없는 시퀀스를 생성할 때 유용합니다.

예시: 제네레이터 함수

def fibonacci_sequence():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

 

이 제네레이터는 무한한 피보나치 수열을 생성합니다. 호출할 때마다 yield를 통해 다음 값을 반환합니다.

gen = fibonacci_sequence()
for _ in range(5):
    print(next(gen))  # 0, 1, 1, 2, 3

 

4. 구글 파이썬 스타일 가이드

스타일 가이드란?

구글 파이썬 스타일 가이드(Google Python Style Guide)는 파이썬 코드를 작성할 때 일관성을 유지하고, 가독성을 높이기 위해 권장되는 코딩 스타일을 정의한 문서입니다.

 

주요 규칙들을 준수하면 코드 품질을 높이고, 협업 시 코드의 이해도를 높일 수 있습니다.

주요 가이드라인

  • 네이밍 규칙: 변수명과 함수명은 소문자와 밑줄(snake_case)을 사용하며, 클래스명은 대문자와 단어를 결합한 형태(CamelCase)를 사용합니다.
  • 인덴트: 들여쓰기는 4칸의 스페이스를 사용합니다. 탭은 사용하지 않습니다.
  • 라인 길이 제한: 한 줄의 길이는 80자를 넘지 않도록 합니다. 긴 줄은 \를 사용해 다음 줄로 넘깁니다.
  • 주석: 주석은 코드의 의도를 명확히 하기 위해 필요하며, 중요하거나 복잡한 부분에 주석을 추가합니다. 문서화 주석(docstring)은 함수나 클래스의 첫 부분에 위치해야 합니다.
  • 공백: 연산자와 쉼표 다음에 공백을 추가하여 가독성을 높입니다.

예시: 함수 정의

def calculate_sum(a, b):
    """두 수의 합을 반환합니다."""
    return a + b

 

함수의 이름, 들여쓰기, 주석 등의 모든 부분이 규칙에 맞게 작성되었습니다.