쉬운 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_list는 list() 생성자를 사용하여 생성되었습니다. 결과적으로 두 리스트는 동일한 값을 갖습니다.
리스트는 가변적이며 중복된 요소를 허용하고, 인덱스를 통해 각 요소에 접근할 수 있습니다.
리스트 길이 확인 방법
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초).
두 경우 모두, 카운터를 사용하는 사용자 정의 함수는 다른 두 가지 방법에 비해 더 많은 시간이 걸립니다.
결론
본 글에서는 파이썬 리스트의 길이를 확인하는 여러 방법을 살펴보고, 각 방법의 성능을 비교 분석했습니다. 이를 통해 리스트의 길이를 효과적으로 측정하고, 데이터 크기에 따라 최적의 방법을 선택하는 데 도움이 되기를 바랍니다.