# Python len() 함수 완벽 가이드 ## 개요 `len()` 함수는 Python의 내장 함수로, 객체의 길이(크기, 개수)를 반환합니다. 데이터 타입에 따라 다르게 작동하는 다재다능한 함수입니다. ## 기본 문법 ```python len(object) ``` - **매개변수**: 길이를 측정할 객체 - **반환값**: 정수(int) - 객체의 길이 ## 데이터 타입별 동작 ### 1. 리스트 (List) 리스트의 **요소 개수**를 반환합니다. ```python # 기본 리스트 numbers = [1, 2, 3, 4, 5] print(len(numbers)) # 5 # 중첩 리스트도 하나의 요소로 계산 nested = [[1, 2], [3, 4], [5, 6]] print(len(nested)) # 3 (내부 리스트는 각각 하나의 요소) # 빈 리스트 empty_list = [] print(len(empty_list)) # 0 ``` ### 2. 문자열 (String) 문자열의 **문자 개수**를 반환합니다. ```python # 영문 text1 = "Hello" print(len(text1)) # 5 # 한글 (한 글자당 1로 계산) text2 = "안녕하세요" print(len(text2)) # 5 # 공백과 특수문자 포함 text3 = "Hello World!" print(len(text3)) # 12 (공백과 ! 포함) # 이모지도 계산 (주의: 일부 이모지는 2로 계산될 수 있음) text4 = "안녕 😊" print(len(text4)) # 4 ``` ### 3. 딕셔너리 (Dictionary) 딕셔너리의 **키(key) 개수**를 반환합니다. ```python # 기본 딕셔너리 person = { "name": "홍길동", "age": 30, "city": "서울" } print(len(person)) # 3 (키가 3개) # 중첩 딕셔너리 data = { "users": {"john": 1, "jane": 2}, "posts": [1, 2, 3], "settings": {} } print(len(data)) # 3 (최상위 키만 계산) ``` ### 4. 집합 (Set) 집합의 **고유 요소 개수**를 반환합니다. ```python # 중복이 있는 경우 numbers = {1, 2, 3, 3, 3, 4, 5} print(len(numbers)) # 5 (중복 제거 후 개수) # 문자 집합 chars = set("hello") print(len(chars)) # 4 ({'h', 'e', 'l', 'o'}) ``` ### 5. 튜플 (Tuple) 튜플의 **요소 개수**를 반환합니다. ```python # 기본 튜플 coordinates = (10, 20, 30) print(len(coordinates)) # 3 # 단일 요소 튜플 single = (42,) # 쉼표 필수! print(len(single)) # 1 ``` ### 6. 바이트 객체 (Bytes, Bytearray) 바이트의 **개수**를 반환합니다. ```python # bytes b_data = b"Hello" print(len(b_data)) # 5 # bytearray ba_data = bytearray(b"Hello") print(len(ba_data)) # 5 # UTF-8 인코딩된 한글 korean = "안녕".encode('utf-8') print(len(korean)) # 6 (한글은 UTF-8에서 3바이트씩) ``` ### 7. range 객체 range의 **요소 개수**를 반환합니다. ```python # 기본 range r1 = range(10) print(len(r1)) # 10 (0부터 9까지) # 시작과 끝 지정 r2 = range(5, 15) print(len(r2)) # 10 (5부터 14까지) # 스텝 지정 r3 = range(0, 10, 2) print(len(r3)) # 5 (0, 2, 4, 6, 8) ``` ## 실전 활용 예시 ### 1. 반복문에서 활용 ```python # 인덱스와 함께 순회 fruits = ["사과", "바나나", "딸기"] for i in range(len(fruits)): print(f"{i}: {fruits[i]}") ``` ### 2. 조건문에서 활용 ```python # 빈 컨테이너 확인 data = [] if len(data) == 0: # 또는 if not data: print("데이터가 없습니다") # 길이 제한 확인 password = "1234" if len(password) < 8: print("비밀번호는 8자 이상이어야 합니다") ``` ### 3. 데이터 분석에서 활용 ```python # 텍스트 데이터 분석 text = "안녕하세요. 파이썬을 공부하고 있습니다." words = text.split() print(f"단어 수: {len(words)}") # 4 print(f"문자 수: {len(text)}") # 24 # 고유 문자 집합 크기 (vocab size) unique_chars = set(text) vocab_size = len(unique_chars) print(f"사용된 고유 문자 수: {vocab_size}") ``` ### 4. 머신러닝/딥러닝에서 활용 ```python # 데이터셋 크기 확인 dataset = ["문서1", "문서2", "문서3", "문서4", "문서5"] train_size = int(0.8 * len(dataset)) train_data = dataset[:train_size] test_data = dataset[train_size:] print(f"전체 데이터: {len(dataset)}개") print(f"훈련 데이터: {len(train_data)}개") print(f"테스트 데이터: {len(test_data)}개") # 배치 처리 batch_size = 32 num_batches = len(dataset) // batch_size print(f"배치 수: {num_batches}") ``` ## 성능 고려사항 ### 시간 복잡도 - 대부분의 컨테이너: **O(1)** - 상수 시간 - 길이가 미리 저장되어 있어 매우 빠름 ```python # 큰 리스트도 즉시 길이 반환 huge_list = list(range(1000000)) import time start = time.time() length = len(huge_list) end = time.time() print(f"100만 개 요소의 길이 계산: {end - start:.10f}초") # 거의 0초에 가까움 ``` ## 주의사항 ### 1. len()을 지원하지 않는 객체 ```python # 제너레이터는 len() 불가 gen = (x for x in range(10)) # len(gen) # TypeError 발생! # 대신 리스트로 변환 gen_list = list(gen) print(len(gen_list)) # 10 ``` ### 2. 사용자 정의 클래스 ```python # __len__ 메서드 구현 필요 class MyList: def __init__(self, items): self.items = items def __len__(self): return len(self.items) my_list = MyList([1, 2, 3, 4, 5]) print(len(my_list)) # 5 ``` ### 3. None 값 ```python # None은 길이가 없음 value = None # len(value) # TypeError 발생! # 안전한 체크 if value is not None: print(len(value)) ``` ## 실제 코드 예시 (GPT 프로젝트) ```python # 한국어 문자 집합 생성 ko_text = "".join(data["train"]["document"]) ko_chars = sorted(list(set(ko_text))) ko_vocab_size = len(ko_chars) # 2,701 # 이 값은 임베딩 테이블 크기 결정에 사용 embedding = nn.Embedding(ko_vocab_size, ko_vocab_size) ``` ## 요약 > [!important] > `len()` 함수는 Python에서 가장 자주 사용되는 내장 함수 중 하나로: > - 데이터 타입에 따라 적절히 작동 > - O(1) 시간 복잡도로 매우 빠름 > - 데이터 분석, 머신러닝에서 필수적 > - 빈 컨테이너 확인, 반복 횟수 결정 등에 활용