[Python TIL] enumerate 사용법과 코딩테스트 활용법 💻

[Python TIL] enumerate 사용법과 코딩테스트 활용법 💻

·

4 min read

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
답안 보기
3번 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
답안 보기
2번 enumeratestart 매개변수를 사용하면 인덱스 시작값을 변경할 수 있습니다. 즉, 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)]
답안 보기
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
답안 보기
2번 조건 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
답안 보기
2번 enumerate는 문자열의 각 문자와 인덱스를 반환합니다.