매일 업데이트
2022-10-20 11:58 7 min

쉬운 3단계로 Python에서 목록의 길이 확인하기

파이썬 리스트의 길이 측정 및 최적 방법 분석

본 글에서는 파이썬 리스트의 길이를 확인하는 여러 방법을 알아보고, 각 방법의 효율성을 비교 분석하여 최적의 방법을 찾아보겠습니다.

파이썬 리스트란 무엇인가?

파이썬 리스트는 다양한 데이터 유형을 담을 수 있는 배열 형태의 자료 구조입니다. 정수, 실수, 문자열, 불리언 값은 물론, 리스트 안에 또 다른 리스트를 중첩하여 저장할 수도 있습니다.

다양한 데이터 타입으로 구성된 리스트의 예시:

      int_list = [1, 2, 3, 4, 5]
      print(int_list) # 출력: [1, 2, 3, 4, 5]

      float_list = [1.1, 2.2, 3.3, 4.4, 5.5]
      print(float_list) # 출력: [1.1, 2.2, 3.3, 4.4, 5.5]

      string_list = ['Geekflare', 'Cloudflare', 'Amazon']
      print(string_list) # 출력: ['Geekflare', 'Cloudflare', 'Amazon']

      boolean_list = [True, False]
      print(boolean_list) # 출력: [True, False]

      nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]
      print(nested_list) # 출력: [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]

      different_datatype_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
      print(different_datatype_list) # 출력: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
    

파이썬 리스트는 대괄호([])를 사용하거나, list() 생성자 함수를 이용하여 생성할 수 있습니다.

생성 방법 예시:

      square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
      print(square_bracket_list) # 출력: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

      constructor_list = list((1, 1.1, 'koreantech.org', True, [1, 1.1, 'Geekflare', True]))
      print(constructor_list) # 출력: [1, 1.1, 'koreantech.org', True, [1, 1.1, 'Geekflare', True]]
    

위 예시에서 square_bracket_list는 대괄호로, constructor_listlist() 생성자를 사용하여 생성되었습니다. 결과적으로 두 리스트는 동일한 값을 갖습니다.

리스트는 가변적이며 중복된 요소를 허용하고, 인덱스를 통해 각 요소에 접근할 수 있습니다.

리스트 길이 확인 방법

  • len() 내장 함수
  • operator 모듈의 length_hint 메서드
  • 사용자 정의 함수 및 카운터

방법 1: len() 내장 함수

len() 함수는 파이썬의 내장 함수로, 리스트뿐만 아니라 세트, 튜플, 딕셔너리 등 반복 가능한 객체의 길이를 반환합니다.

예시 코드:

      languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
      languages_length = len(languages)
      print('리스트의 길이:', languages_length)
  

출력:

리스트의 길이: 5

파이썬 환경이 준비되어 있지 않다면 온라인 파이썬 컴파일러를 사용하여 코드를 실행해 볼 수 있습니다.

방법 2: operator.length_hint() 메서드

length_hint 메서드는 리스트, 세트, 튜플, 딕셔너리 등의 반복 가능한 객체의 예상 길이를 반환합니다. 이 메서드는 operator 모듈에 포함되어 있으며, 일반적인 내장 함수처럼 바로 사용할 수 없습니다.

예시 코드:

      import operator
      languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
      languages_length = operator.length_hint(languages)
      print('operator를 이용한 리스트의 길이:', languages_length)
  

출력:

operator를 이용한 리스트의 길이: 5

방법 3: 사용자 정의 함수와 카운터

이 방법은 for 루프와 카운터를 사용하여 리스트의 길이를 계산하는 전통적인 방식입니다.

다음은 리스트(또는 다른 반복 가능한 객체)를 인자로 받아 길이를 반환하는 파이썬 함수 예시입니다.

함수 정의:

      def iterable_count(iterable):
        length = 0
        for item in iterable:
          length += 1
        return length
   

사용 예시:

      def iterable_count(iterable):
        length = 0
        for item in iterable:
          length += 1
        return length

      languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
      languages_length = iterable_count(languages)
      print('사용자 정의 함수를 이용한 리스트의 길이:', languages_length)
  

출력:

사용자 정의 함수를 이용한 리스트의 길이: 5

세 가지 방법 분석

대규모 리스트에 대한 성능 분석:

      import timeit
      import operator

      def iterable_count(iterable):
        length = 0
        for item in iterable:
          length += 1
        return length

      integer_list = list(range(1, 9999999))

      start_time = timeit.default_timer()
      len_length = len(integer_list)
      print(timeit.default_timer() - start_time, 'len()을 사용한 정수 리스트의 길이:', len_length)

      start_time = timeit.default_timer()
      len_length = operator.length_hint(integer_list)
      print(timeit.default_timer() - start_time, 'length_hint를 사용한 정수 리스트의 길이:', len_length)

      start_time = timeit.default_timer()
      iterable_count_length = iterable_count(integer_list)
      print(timeit.default_timer() - start_time, '사용자 정의 함수를 사용한 정수 리스트의 길이:', iterable_count_length)
    

출력:

3.957189619541168e-06 len()을 사용한 정수 리스트의 길이: 9999998
3.0621886253356934e-06 length_hint를 사용한 정수 리스트의 길이: 9999998
0.4059128537774086 사용자 정의 함수를 사용한 정수 리스트의 길이: 9999998
  

수백만 개의 데이터가 있을 때는 length_hint가 가장 빠릅니다 (약 3.0621886253356934e-06초). 이는 length_hint가 CPython 런타임에서 사용되는 파이썬 래퍼이기 때문입니다.

소규모 리스트에 대한 성능 분석:

      import timeit
      import operator

      def iterable_count(iterable):
        length = 0
        for item in iterable:
          length += 1
        return length

      integer_list = list(range(1, 100))

      start_time = timeit.default_timer()
      len_length = len(integer_list)
      print(timeit.default_timer() - start_time, 'len()을 사용한 정수 리스트의 길이:', len_length)

      start_time = timeit.default_timer()
      len_length = operator.length_hint(integer_list)
      print(timeit.default_timer() - start_time, 'length_hint를 사용한 정수 리스트의 길이:', len_length)

      start_time = timeit.default_timer()
      iterable_count_length = iterable_count(integer_list)
      print(timeit.default_timer() - start_time, '사용자 정의 함수를 사용한 정수 리스트의 길이:', iterable_count_length)
   

출력:

7.813796401023865e-07 len()을 사용한 정수 리스트의 길이: 99
1.1278316378593445e-06 length_hint를 사용한 정수 리스트의 길이: 99
3.462657332420349e-06 사용자 정의 함수를 사용한 정수 리스트의 길이: 99
   

데이터가 수천 개 이하일 때는 len() 함수가 가장 빠른 성능을 보입니다 (약 7.813796401023865e-07초).

두 경우 모두, 카운터를 사용하는 사용자 정의 함수는 다른 두 가지 방법에 비해 더 많은 시간이 걸립니다.

결론

본 글에서는 파이썬 리스트의 길이를 확인하는 여러 방법을 살펴보고, 각 방법의 성능을 비교 분석했습니다. 이를 통해 리스트의 길이를 효과적으로 측정하고, 데이터 크기에 따라 최적의 방법을 선택하는 데 도움이 되기를 바랍니다.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.