구문, 예제 및 사용 사례
파이썬에서 반복 가능한(iterable) 객체를 다룰 때, 그 안에 포함된 요소의 개수를 알아내는 것은 매우 흔한 작업입니다. 파이썬 내장 함수인 len()을 사용하여 반복 가능한 객체의 길이를 구하는 방법을 자세히 알아보겠습니다.
파이썬은 다양한 내장 데이터 구조와 이들을 조작할 수 있는 여러 메서드를 제공합니다. 또한 이러한 데이터 구조를 사용할 때 유용한 내장 함수들이 있습니다. 그 중 하나가 len() 함수로, 반복 가능한 객체 내 항목의 개수를 반환합니다.
본 튜토리얼에서는 리스트, 튜플, 문자열 등 다양한 반복 가능한 객체와 함께 len() 함수를 사용하는 방법을 배울 것입니다. 더불어, 몇 가지 일반적인 활용 예시도 살펴보겠습니다.
시작해 볼까요! 👩🏫
파이썬 len() 함수의 문법
파이썬 len() 함수의 기본 문법은 다음과 같습니다.
len(iterable)
보시다시피, len() 함수는 단 하나의 매개변수를 필요로 하며, 이 매개변수는 유효한 반복 가능한 객체여야 합니다. 반복 가능한 객체는 주로 리스트, 튜플, 또는 문자열 중 하나입니다. 하지만 다른 유효한 유형도 가능합니다.
len() 함수의 문법이 매우 간단하다는 것을 알 수 있습니다. 이제 몇 가지 코드 예시를 살펴보겠습니다.
📑 본 튜토리얼의 코드 예시는 파이썬 REPL에서 직접 따라 해 볼 수 있습니다.
반복 가능한 객체와 함께 len() 함수 사용
시퀀스형 객체
len() 함수는 리스트, 튜플, 문자열과 같은 시퀀스형 반복 가능한 객체의 길이를 구하는 데 사용될 수 있습니다.
다음은 예시입니다.
>>> nums = [9, 3, 6, 1, 2] >>> len(nums) 5 >>> nums_tup = (9, 3, 6, 1, 2) >>> len(nums_tup) 5
시퀀스를 저장하는 이러한 데이터 구조의 경우, 인덱스를 사용해 요소에 접근하거나 필요에 따라 슬라이스(부분 시퀀스)를 추출하는 것이 일반적입니다.
그 외 컬렉션
len() 함수는 세트(set)와 딕셔너리(dictionary)와 같은 다른 파이썬 컬렉션과 함께 사용할 수도 있습니다.
이러한 데이터 구조는 정렬되지 않은 컬렉션입니다. 요소의 순서가 중요하지 않더라도 컬렉션 내 총 항목 수를 얻는 것은 여전히 유용할 수 있습니다.
>>> nums_set = set(nums)
>>> len(nums_set)
5
>>> prices = {'Notebook': 5, 'Pencil case': 7, 'Bookmarks': 3, 'Pens': 1, 'Markers': 8}
>>> len(prices)
5
파이썬 len() 함수의 일반적인 활용 예시
지금까지 len() 함수를 사용하여 반복 가능한 객체 내 요소의 개수를 얻는 간단한 예시들을 살펴보았습니다. 이제 이것을 실제 상황에서 어떻게 사용할 수 있는지 알아봅시다.
#1. for 루프를 사용한 반복
파이썬 for 루프는 반복 가능한 객체 내 요소들을 순회하는 데 사용되는 구조를 제공합니다. 그러나 각 요소의 인덱스에 접근하거나 인덱스와 요소를 함께 접근하고 싶다면 다음과 같이 range() 함수를 활용할 수 있습니다.
>>> nums = [9, 2, 4, 7, 8]
>>> for i in range(len(nums)):
... print(f"Index {i}: {nums[i]}")
range(N)은 0, 1, 2, ..., N-1의 정수 시퀀스를 제공하므로, range(len(nums))는 반복 가능한 유효한 인덱스 집합을 제공합니다.
# 출력 Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
하지만, 인덱스와 요소 모두에 접근하는 더 권장되는 파이썬 방식은 enumerate 함수를 사용하는 것입니다.
>>> nums = [9, 2, 4, 7, 8]
>>> for idx, num in enumerate(nums):
... print(f"Index {idx}: {num}")
# 출력 Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
#2. while 루프를 사용한 조건부 반복
숫자 리스트 nums가 있다고 가정해 봅시다. 리스트의 메서드인 pop()은 리스트의 마지막 요소를 제거하고 반환합니다.
nums 리스트의 길이, 즉 len(nums)가 0보다 크면 제거할 요소가 적어도 하나 이상 있다는 의미입니다.
>>> nums = [9, 2, 4, 7, 8] >>> while len(nums) > 0: ... nums.pop()
# 출력 8 7 4 2 9
위의 예시는 다음처럼 더 명확하게 작성할 수 있습니다.
>>> nums = [9, 2, 4, 7, 8] >>> while nums: ... nums.pop()
while nums:는 "nums 리스트가 비어있지 않은 동안"이라는 조건과 동일합니다.
#3. 반복 가능한 객체의 길이 확인 및 검증
len 함수의 또 다른 일반적인 사용법은 특정 반복 가능한 객체의 길이를 확인하고 검증하는 것입니다.
여기서는 사용자 이름이 길이(len() 함수로 계산)를 기준으로 유효한 문자열인지 확인합니다.
>>> username = "another-random-user"
>>> if len(username) > 10:
... print("Username too long; should be 10 characters long at max.")
... elif len(username) < 5:
... print("Username too short; should be at least 5 characters long.")
... else:
... print("Valid username!")
Username too long; should be 10 characters long at max.
#4. 리스트 및 딕셔너리 컴프리헨션
파이썬의 컴프리헨션은 기존 반복 가능한 객체로부터 새로운 반복 가능한 객체를 생성하는 간결한 문법을 제공합니다. 컴프리헨션 표현식 안에서 내장 함수를 사용할 수 있습니다.
리스트 컴프리헨션
이 리스트 컴프리헨션에서는 len() 함수를 사용하여 언어 리스트의 각 문자열 길이를 구합니다.
>>> languages = ['Python', 'C', 'Rust', 'JavaScript'] >>> len_langs = [len(lang) for lang in languages] >>> len_langs [6, 1, 4, 10]
딕셔너리 컴프리헨션
이 딕셔너리 컴프리헨션에서는 언어 리스트와 len() 함수를 사용하여 딕셔너리를 생성합니다.
>>> languages = ['Python', 'C', 'Rust', 'JavaScript']
>>> lang_len = {lang: len(lang) for lang in languages}
>>> lang_len
{'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}
여기서 키와 값은 각각 언어 문자열과 해당 문자열의 길이입니다.
#5. 사용자 정의 정렬의 key 매개변수
파이썬에는 파이썬 리스트를 제자리에서 정렬하는 내장 sort() 메서드와 리스트 및 기타 반복 가능한 객체를 정렬하는 sorted() 함수가 있습니다.
이 두 함수 모두 key 매개변수를 사용하여 정렬 방식을 사용자 정의할 수 있습니다.
여기서는 문자열의 길이를 기준으로 언어 리스트를 정렬합니다.
>>> languages = ['Python', 'C', 'Rust', 'JavaScript'] >>> languages.sort(key=len) >>> languages ['C', 'Rust', 'Python', 'JavaScript']
다음 코드에서는 sorted() 함수를 사용하여 정렬된 새 리스트를 얻습니다.
>>> languages = ['Hindi', 'English', 'German', 'French'] >>> sorted(languages, key=len) ['Hindi', 'German', 'French', 'English']
이 예시에서 'German'과 'French'는 각각 6글자입니다. sorted() 함수는 안정적인 정렬을 수행하므로, 원래 리스트의 순서가 유지됩니다.
#6. NumPy 배열의 길이
len() 함수는 NumPy 배열과 같은 다른 데이터 구조와 함께 사용할 수도 있습니다.
>>> import numpy as np >>> np_array = np.array([3, 4, 6, 9]) >>> type(np_array) <class 'numpy.ndarray'> >>> len(np_array) 4
이 경우 np_array는 4개의 요소를 가진 벡터입니다. 따라서 len(np_array)는 배열에 있는 요소의 개수인 4를 반환합니다.
행렬은 2차원 배열입니다.
다음 예시를 보겠습니다. len(np_array)는 행의 개수인 2입니다.
>>> matrix = [[1, 2, 3], [4, 5, 6]]
>>> np_array = np.array(matrix)
>>> np_array
array([[1, 2, 3],
[4, 5, 6]])
>>> len(np_array)
2
이해를 돕기 위해 행렬로 다시 돌아가 봅시다. 외부 리스트에 중첩된 두 개의 리스트가 있는 중첩 리스트 구조가 있습니다. 그리고 len() 함수는 컨테이너의 항목 수를 반환합니다(여기서는 두 개의 리스트).
>>> help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
그러나 다차원 배열을 다루기 시작하면 shape 속성을 사용하는 것이 좋습니다.
>>> np_array.shape (2, 3)
파이썬 len() 함수를 사용할 때 피해야 할 흔한 실수

논의를 마무리하기 위해, 파이썬에서 len 함수를 사용할 때 피해야 할 몇 가지 일반적인 실수를 살펴보겠습니다.
반복 불가능한 데이터 유형과 함께 len() 사용
len 함수는 유효한 반복 가능한 객체만을 인수로 받는다는 것을 알고 있습니다. 반복할 수 없는 유효하지 않은 데이터 유형으로 len 함수를 호출하면 오류가 발생합니다.
이러한 유효하지 않은 유형에는 정수, 부동 소수점 숫자, 부울과 같은 기본 데이터 유형이 포함됩니다.
>>> len(2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len() >>> len(True) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'bool' has no len() >>> len(3.14) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'float' has no len()
파이썬에서 생성기(generator)는 시퀀스 생성이 필요한 경우 메모리 효율적인 선택입니다. 생성기 객체는 요청 시 한 번에 한 요소씩 시퀀스의 요소를 반환합니다. 그러나 생성기 객체에는 길이가 없습니다.
따라서 생성기 객체의 길이를 계산하려고 하면 오류가 발생합니다.
>>> nums_sq = (i * i for i in range(10)) >>> nums_sq <generator object <genexpr> at 0x0157DBC0> >>> len(nums_sq) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'generator' has no len()
길이가 1인 튜플과 함께 len() 사용
요소를 튜플에 삽입할 때, 쉼표 없이 단 하나의 요소만 넣으면 파이썬은 그 요소를 튜플이 아닌 단일 요소로 해석합니다.
예시를 보겠습니다.
>>> nums = (1) >>> len(nums) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len()
따라서 요소가 하나만 있는 튜플을 만들 때는 다음 형식으로 초기화해야 합니다. tuple_name = (elt,). 이렇게 해야 튜플로 해석됩니다.
>>> nums = (1,) >>> len(nums) 1
요약
다음은 본 튜토리얼에서 다룬 내용을 요약한 것입니다.
- 파이썬에서
len()함수를 사용하여 반복 가능한 객체의 항목 개수를 찾을 수 있습니다. 길이 함수를 사용하는 문법은len(any-valid-iterable)입니다. - 여기에는 리스트, 튜플, 문자열과 같은 시퀀스형 객체와 딕셔너리, 세트와 같은 다른 컬렉션이 포함됩니다.
len()함수는 일반적으로 루프 및 컴프리헨션에서 사용됩니다.- 길이에 따라 정렬을 사용자 정의해야 하는 경우
len()함수를key매개변수로 사용할 수도 있습니다. 예: 길이를 기준으로 문자열 리스트를 정렬합니다.
다음으로, 파이썬의 sum() 함수를 사용하는 방법을 알아보겠습니다.