본문 바로가기
Category/Python

Python의 next() 함수로 이터레이터 객체 순회하기

by Corinee 2024. 12. 8.
728x90

Python의 next() 함수

Python의 next() 함수는 이터레이터(iterator)에서 다음 값을 반환하는 함수입니다. 이 함수는 이터레이터 객체를 순회할 때 사용되며, 다음 항목으로 이동하거나, 더 이상 항목이 없을 경우 기본값을 반환할 수 있습니다.

사용법

next(iterator, default)
  • iterator: 이터레이터 객체. iter() 함수로 생성할 수 있습니다.
  • default (선택 사항): 이터레이터가 끝났을 때 반환할 값입니다. 기본값을 지정하지 않으면 예외(StopIteration)가 발생합니다.

동작 과정

  1. 이터레이터에서 값을 하나 꺼냅니다.
  2. 다음 값이 없으면 기본값을 반환하거나 StopIteration 예외를 발생시킵니다.

예제

1. 기본 사용

next()를 사용해 이터레이터에서 값을 가져옵니다:

# 이터레이터 생성
my_list = [1, 2, 3]
my_iter = iter(my_list)

print(next(my_iter))  # 출력: 1
print(next(my_iter))  # 출력: 2
print(next(my_iter))  # 출력: 3
# print(next(my_iter))  # 예외: StopIteration

2. 기본값 사용

이터레이터가 끝난 경우에도 기본값을 지정하면 안전하게 처리할 수 있습니다:

my_list = [1, 2, 3]
my_iter = iter(my_list)

print(next(my_iter))  # 출력: 1
print(next(my_iter))  # 출력: 2
print(next(my_iter))  # 출력: 3
print(next(my_iter, "End"))  # 출력: End

3. 파일 읽기와 활용

파일을 한 줄씩 읽어오는 데 사용할 수 있습니다:

with open("example.txt", "r") as file:
    lines = iter(file)  # 파일 객체는 이터레이터로 취급됨
    print(next(lines))  # 첫 번째 줄 출력
    print(next(lines))  # 두 번째 줄 출력

이터레이터와 연관성

  • 이터레이터(iterator)__iter__()__next__() 메서드를 가진 객체입니다.
  • next() 함수는 내부적으로 객체의 __next__() 메서드를 호출합니다.
class Counter:
    def __init__(self, start=0):
        self.num = start

    def __iter__(self):
        return self

    def __next__(self):
        self.num += 1
        return self.num

counter = Counter()
print(next(counter))  # 출력: 1
print(next(counter))  # 출력: 2
print(next(counter))  # 출력: 3

활용 예제

1. 무한 이터레이터

itertools 모듈의 count()와 함께 무한 루프를 제어할 수 있습니다:

import itertools

counter = itertools.count(start=1)
for _ in range(5):
    print(next(counter))  # 출력: 1, 2, 3, 4, 5

2. CSV 파일 읽기

csv.reader는 이터레이터이므로 next()로 첫 번째 줄(헤더)을 처리할 수 있습니다:

import csv

with open("data.csv", "r") as file:
    reader = csv.reader(file)
    header = next(reader)  # 첫 번째 줄 읽기
    print("Header:", header)
    for row in reader:
        print("Row:", row)

주의 사항

  1. StopIteration 예외 처리:
    • 기본값을 제공하지 않으면 이터레이터의 끝에서 예외가 발생합니다. 안전한 처리를 위해 기본값을 설정하는 것이 좋습니다.
  2. 이터레이터는 한 번만 순회 가능:
    • next()로 값을 꺼내면 이터레이터는 이미 소비된 값을 다시 반환하지 않습니다.

요약

  • next()는 이터레이터에서 값을 하나씩 꺼내는 함수입니다.
  • 더 이상 값이 없을 경우 기본값을 반환하거나 예외를 발생시킵니다.
  • 이터레이터와 함께 사용해 루프나 데이터 처리를 간결하게 구현할 수 있습니다.
728x90