Python을 사용하다 보면 리스트, 튜플, 문자열 같은 데이터를 다룰 때 인덱스와 값을 동시에 처리해야 하는 경우가 많은데요.
이럴 때 enumerate
를 사용하면 코드를 더 간단하고 직관적으로 작성할 수 있습니다.
이번 글에서는 enumerate
의 기본 사용법부터 코딩테스트 활용법, 그리고 초보자들을 위한 실수 방지 팁까지 다뤄보도록 하겠습니다!
1. enumerate
란?
enumerate
는 반복문에서 인덱스와 값을 동시에 반환해주는 내장 함수입니다.
문법:
enumerate(iterable, start=0)
iterable
: 리스트, 튜플, 문자열 등 반복 가능한 객체.start
: 인덱스의 시작값(기본값은 0).
예제: 기본 사용법
fruits = ["apple", "banana", "cherry"]
for index, value in enumerate(fruits):
print(f"Index: {index}, Value: {value}")
출력 결과:
Index: 0, Value: apple
Index: 1, Value: banana
Index: 2, Value: cherry
2. enumerate
가 필요한 이유
인덱스를 관리하는 방법에는 range(len())
을 사용하는 방법도 있지만 이는 코드를 복잡하게 만들 수 있습니다.
range(len())
를 사용한 예제:
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(f"{i}: {fruits[i]}")
이 코드는 반복문에서 인덱스와 값을 분리해서 처리하기 때문에 번거롭습니다.
→ 하지만 아래처럼 enumerate
를 사용하면 간단히 해결할 수 있습니다!
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
3. 코딩테스트에서 enumerate
의 활용법
1) 값과 인덱스를 동시에 처리
코딩테스트에서는 값과 인덱스를 한 번에 다룰 때 enumerate
가 특히 유용합니다.
numbers = [3, 5, 7, 2, 8]
max_value = -1
max_index = -1
for index, value in enumerate(numbers):
if value > max_value:
max_value = value
max_index = index
print(f"가장 큰 값: {max_value}, 인덱스: {max_index}")
출력 결과:
가장 큰 값: 8, 인덱스: 4
2) 리스트 정렬 후 원래 인덱스 유지
정렬된 데이터의 원래 인덱스를 유지해야 하는 문제는 enumerate
로 간단히 해결할 수 있습니다.
numbers = [4, 1, 3, 2]
indexed_numbers = list(enumerate(numbers)) # (index, value) 형태로 변환
indexed_numbers.sort(key=lambda x: x[1]) # 값(value)을 기준으로 정렬
print(indexed_numbers) # [(1, 1), (3, 2), (2, 3), (0, 4)]
3) 조건에 맞는 값의 인덱스 찾기
특정 조건을 만족하는 값을 찾고 해당 인덱스를 반환할 때도 유용합니다.
numbers = [5, 7, 10, 13, 8]
for index, value in enumerate(numbers):
if value % 2 == 0:
print(f"첫 번째 짝수: {value}, 인덱스: {index}")
break
출력 결과:
첫 번째 짝수: 10, 인덱스: 2
4. 객관식 연습 문제
enumerate
를 활용한 코드의 결과를 예측해보고, 개념을 얼마나 이해했는지 점검해보세요!
문제 1: 기본 동작
다음 코드를 실행했을 때 출력 결과는 무엇일까요?
fruits = ["apple", "banana", "cherry"]
for index, value in enumerate(fruits):
print(f"{index}: {value}")
1: apple
2: banana
3: cherry
apple: 0
banana: 1
cherry: 2
0: apple
1: banana
2: cherry
IndexError: list index out of range
답안 보기
enumerate
는 기본적으로 인덱스를 0부터 시작합니다.문제 2: 시작 인덱스
다음 코드를 실행했을 때 출력 결과는 무엇일까요?
numbers = [10, 20, 30]
for index, value in enumerate(numbers, start=5):
print(f"{index}: {value}")
0: 10
1: 20
2: 30
5: 10
6: 20
7: 30
10: 5
20: 6
30: 7
TypeError: enumerate() takes no keyword arguments
답안 보기
enumerate
의 start
매개변수를 사용하면 인덱스 시작값을 변경할 수 있습니다. 즉, 5부터 인덱스가 시작됩니다.문제 3: 리스트 정렬과 원래 인덱스
다음 코드를 실행했을 때 sorted_list
의 값은 무엇일까요?
numbers = [50, 10, 40]
indexed_numbers = list(enumerate(numbers))
sorted_list = sorted(indexed_numbers, key=lambda x: x[1])
힌트!
lambda x: x[1]
는 각 튜플에서 두 번째 값(value
)만 가져오는 역할을 합니다.[(0, 50), (1, 10), (2, 40)]
[(1, 10), (2, 40), (0, 50)]
[(2, 40), (1, 10), (0, 50)]
[(50, 0), (10, 1), (40, 2)]
답안 보기
enumerate
는 (index, value)
형식으로 값을 반환하며, key=lambda x: x[1]
는 값(value)을 기준으로 정렬합니다.문제 4: 조건에 맞는 값 찾기
다음 코드를 실행했을 때 출력 결과는 무엇일까요?
numbers = [5, 10, 15, 20]
for index, value in enumerate(numbers):
if value % 10 == 0:
print(f"{index}: {value}")
0: 5
1: 10
1: 10
3: 20
1: 10
3: 20
답안 보기
value % 10 == 0
에 해당하는 값이 10과 20이므로, 각각의 인덱스와 함께 출력됩니다.문제 5: 문자열과 enumerate
다음 코드를 실행했을 때 출력 결과는 무엇일까요?
text = "hello"
for index, char in enumerate(text):
print(f"{index}: {char}")
h: 0
e: 1
l: 2
l: 3
o: 4
0: h
1: e
2: l
3: l
4: o
IndexError: string index out of range
h
e
l
l
o
답안 보기
enumerate
는 문자열의 각 문자와 인덱스를 반환합니다.