이 글에서는 Python 3.x(그 이하 버전 포함)에서 이터레이터를 구현하고 효과적으로 활용하는 방법을 알아봅니다. Python에서 반복 작업을 수행할 수 있는 다양한 방법을 하나씩 살펴보겠습니다.
방법 1 – 길이를 미리 아는 경우: while 루프
예제 코드
genre = ("Python", "C", "C++", "Java")
print("튜토리얼 포인트에서 다루는 주제:")
i = 0
while (i < len(genre)):
print(genre[i])
i += 1
설명
이 방식은 코드가 비교적 장황하고 간결하지 못해 선호되지 않습니다. 인덱스 변수를 직접 관리해야 하고 오류 처리도 까다롭기 때문에 대규모 프로그램이나 체계적인 설계에서는 거의 사용되지 않습니다.
실행 결과
튜토리얼 포인트에서 다루는 주제: Python C C++ Java
방법 2 – 길이를 미리 아는 경우: for 루프와 range()
예제 코드
genre = ("Python", "C", "C++", "Java")
print("튜토리얼 포인트에서 다루는 주제:")
for i in range(len(genre)):
print(genre[i])
설명
많은 프로그래머들이 선호하는 대표적인 방법입니다. range() 함수가 이터레이터를 증감시키는 역할을 하며, 기본적으로 인덱스를 1씩 증가시킵니다. 필요하다면 세 번째 인자로 증감 폭(step)을 지정해 원하는 간격으로 순회할 수도 있습니다.
실행 결과
튜토리얼 포인트에서 다루는 주제: Python C C++ Java
방법 3 – 길이 없이 순회하는 for 루프
예제 코드
genre = ("Python", "C", "C++", "Java")
print("튜토리얼 포인트에서 다루는 주제:")
for i in genre:
print(i)
설명
리스트, 딕셔너리, 튜플, n차원 배열 같은 선형 자료구조를 순회할 때 가장 널리 쓰이는 파이썬다운 방식입니다. 이터레이터가 자료구조의 각 요소를 자동으로 순회하며 콘솔에 데이터를 출력하고, 인덱스 증감을 개발자가 직접 관리할 필요가 없다는 점이 큰 장점입니다.
실행 결과
튜토리얼 포인트에서 다루는 주제: Python C C++ Java
방법 4 – enumerate() 활용
예제 코드
genre = ("Python", "C", "C++", "Java")
iterator = enumerate(genre)
print("튜토리얼 포인트에서 다루는 주제:")
for i, v in iterator:
print(v, end="\t")
설명
enumerate()는 요소와 그 인덱스를 하나의 쌍으로 묶어주는 이터레이터를 생성합니다. 덕분에 인덱스와 값을 동시에 다룰 수 있으며, 이를 위해 인덱스용 변수와 값용 변수 두 개를 지정해야 합니다. 인덱스 정보가 필요한 반복 작업에서 특히 유용합니다.
실행 결과
튜토리얼 포인트에서 다루는 주제: Python C C++ Java
방법 5 – zip() 함수 활용
예제 코드
genre = ("Python", "C", "C++", "Java")
extras = ["C#", "Dart", "Erlang", "Go"]
print("튜토리얼 포인트에서 다루는 주제:")
for i, j in zip(genre, extras):
print(i, j, sep="\t")
설명
zip() 함수를 사용하면 리스트, 배열, 튜플 등 두 개의 선형 자료구조를 동시에 순회할 수 있습니다. 여러 시퀀스를 병렬로 처리해야 하는 다양한 상황에서 매우 유용합니다. zip()은 더 짧은 자료구조의 길이에 맞춰 순회를 종료하므로, 긴 쪽의 남은 요소는 자동으로 건너뛰게 됩니다.
실행 결과
튜토리얼 포인트에서 다루는 주제: Python C# C Dart C++ Erlang Java Go
마무리
지금까지 Python 3.x에서 반복문과 이터레이터를 구현하는 5가지 방법을 살펴보았습니다. 상황과 자료구조의 특성에 맞는 반복 방식을 선택하면 코드의 가독성과 효율성을 모두 높일 수 있습니다. 소개한 패턴들은 다른 프로그래밍 언어에서도 유사한 형태로 응용할 수 있으니, 직접 실습하며 각 방법의 차이를 확인해 보시기 바랍니다.