Python

[Python] emunerate() 사용법

HEY__ 2024. 7. 2. 11:23
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

✅ Emunerate란

`emunerate()`는 Python에 내장되어 있는 함수로서 반복 가능한 객체를 인자로 받아, 해당 객체의 인자들을 순회하면서

`index`와 `요소`를 쌍(Pair)로 반환한다. 편의성과 가독성을 높일 수 있는 좋은 내장함수이다.👍

 

파이썬에서 일반적으로 `for`문을 사용할 때에는 `for {원소} in {목록}:` 혹은 `for {인덱스} in range({범위})`와 같은 형태로 많이 사용된다.

`{목록}`에는 주로 list, tuple, string, iterator, generator와 같은 순회가 가능한 타입들을 넣어 사용할 수 있다.

 

그런데 가끔 코드를 작성하다보면 `인덱스`와 `요소`를 동시에 접근하고 싶을 때가 있다.

`for {인덱스} in range({범위})`를 활용하면 이를 해결할 수 있지만, `list[i]`와 같이 인덱스를 명시해줘야하기 때문에 다소 번거롭다는 단점이 발생한다.

for i in range(len(score)):
    today = score[i]
    ...

이런 상황에 사용하는 것이 바로 `emunerate()` 내장 함수이며, 특히 `for문`과 결합하여 사용하면 더 큰 시너지를 발휘할 수 있다.

 


✅ 사용법

1️⃣ enumerate()

enumerate(iterable, start=0)

`iterable`: 반복 가능한 객체. list, tuple, str, dictionary 등과 같이 순회가 가능한 타입이 여기에 들어갈 수 있다.

`start`: 인덱스의 시작 값을 설정. 생략 가능하며, 생략 시에는 0이 기본 값으로 들어간다.

 

이 때 주의할 점은 `start`에 값을 넣었을 때 iterable의 해당 인덱스 값부터 시작하는 것이 아니라, `인덱스에 start가 더해진 값`을 받아온다는 것이다.

l1 = ["eat", "sleep", "repeat"]

# changing index and printing separately
# output: 100 eat   101 sleep   102 repeat
for count, ele in enumerate(l1, 100):
    print (count, ele)

# 출처: https://www.geeksforgeeks.org/enumerate-in-python/

 

`enumerate()`는 `인덱스-요소 쌍`을 가지는 `enumerate`를 반환한다.

l1 = ["eat", "sleep", "repeat"]

# creating enumerate objects
obj1 = enumerate(l1)

# OUTPUT: Return type: <class 'enumerate'> 
print ("Return type:", type(obj1))

# 출처: https://www.geeksforgeeks.org/enumerate-in-python/

2️⃣ `for문`과 같이 사용하기

`emunerate()`는 반복문, 특히 `for문`과 함께 많이 사용된다.

1번과 2번은 같은 출력 결과를 내지만, 반복문 내에서 인덱스와 요소를 따로 접근할 수 있기 때문에 편의성과 가독성 부분에서 이점이 있다.

# 1번. 일반적인 리스트 반복
fruits = ['apple', 'banana', 'cherry']
for i in range(len(fruits)):
    print(i, fruits[i])

# 2번. enumerate를 사용한 반복
for i, fruit in enumerate(fruits):
    print(i, fruit)
    
# 출처: chatGPT
# OUTPUT
0 apple
1 banana
2 cherry

 

3️⃣ 다음 요소에 접근하기; next()

`enumerate()`를 통해 받은 enumerate 객체와 `next()` 함수를 이용하여 다음 요소에 접근할 수 있다.

`next()`를 호출할 때마다 enumerate 내의 pointer(포인터)가 다음 요소를 가리키며, 해당 값을 인덱스-요소 쌍의 tuple 형식으로 반환한다.

 

fruits = ['apple', 'banana', 'cherry']
enum_fruits = enumerate(fruits)

next_element = next(enum_fruits)

# OUTPUT: Next Element: (0, 'apple')
print("Next Element: {next_element}")

# 출처: https://www.geeksforgeeks.org/enumerate-in-python/

4️⃣ 2차원 배열 순회하기

`enumerate()`를 활용하여 2차원 리스트/튜플을 순회할 수 있다.

>>> for r, row in enumerate(matrix):
...     for c, letter in enumerate(row):
...             print(r, c, letter)
...
0 0 A
0 1 B
0 2 C
1 0 D
1 1 E
1 2 F
2 0 G
2 1 H
2 2 I

# 출처: https://www.daleseo.com/python-enumerate/

✅  참고 자료 & 링크

https://www.daleseo.com/python-enumerate/

 

파이썬의 enumerate() 내장 함수로 for 루프 돌리기

Engineering Blog by Dale Seo

www.daleseo.com

 

https://www.geeksforgeeks.org/enumerate-in-python/

 

Enumerate() in Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

728x90