[파이썬(Python)] enumerate() 함수 사용하는 이유 (차이점, 사용법)

728x90
반응형

목차

 

- for문에서의 사용

- enumerate() 함수

- enumerate() 함수 사용법 1. 시작 인덱스 변경하기


파이썬 enumerate() 함수 사용 이유 및 사용법

가끔 알고리즘 풀이를 보다보면 enumerate() 함수를 사용하는 것을 볼 수 있다.

for 루프를 사용하는 것과 방식은 비슷해보이는데, 어떤 게 다르고 어떤 게 좋은지 궁금해서 찾아봤다.

 

보통 인덱스를 증가시키면서 for 루프를 돌리는 경우가 많다.

하지만, 파이썬에서는 enumerate() 라는 내장 함수를 통해 이러한 인덱스 변수를 사용하지 않고 루프를 돌리는 방식이 선호된다. 그리고 이런 코딩 스타일을 '파이썬 답다(Pythonic)'고 한다.

 


for 문에서의 사용

 

리스트를 순회하면서 인덱스가 필요 없는 경우에는, 그냥 다음과 같이 in 을 사용해서 원소를 출력할 수 있다.

 

words = ["apple", "water", "tree"]
for word in words:
	print(word)

# 출력
apple
water
tree

 

 

리스트를 순회하면서 인덱스가 필요한 경우, 대표적으로 두 가지 경우로 나누어 볼 수 있다.

  1. 인덱스 변수를 별도로 선언하여 증가시키며 사용하는 경우
  2. range() 함수를 사용하여 for문 안에서 리스트에 인덱스로 접근하는 경우

 

 

1. 인덱스 변수를 별도로 선언하여 증가시키며 사용하는 경우

for 문 바깥에 인덱스 변수를 별도로 선언하여 for문을 돌 때마다 증가시키면서 사용할 수 있다.

이 방법이 틀린 것은 아니지만, i 변수가 for 반복문이 조욜된 이후에도 네임 스페이스에 남아 있기 때문에 이상적이지는 않다.

words = ["apple", "water", "tree"]
	
i = 0	# 인덱스 변수 별도로 선언
for word in words:
	print(i, word)
    i += 1

# 출력
0 apple
1 water
2 tree

 

 

 

2. range() 함수를 사용하여 for문 안에서 리스트에 인덱스로 접근하는 경우

len() 함수를 이용해서 리스트의 길이를 가져오고, range() 함수를 이용하여 인덱스 리스트를 만든다.

1번 방법보다는 나아보이지만, 파이썬 커뮤니티에서는 이러한 코드를 파이썬 답지 않아보인다고 한다.

words = ["apple", "water", "tree"]

for i in range(len(words)):
	print(i, words[i])

# 출력
0 apple
1 water
2 tree

 

 


 

enumerate() 함수

 

🤔 그럼 어떻게 해야 좀 더 파이썬답게 인덱스와 원소를 동시에 접근하면서 루프를 돌릴 수 있을까?

enumerate() 함수 이용하기!

 

인덱스와 원소를 한번에 제공하는 것은 enumerate() 함수의 아주 유용한 장점이다!

 

 

enumerate()파이썬의 내장 함수다.

for문의 in 뒷부분을 enumerate() 함수로 한번 감싸주기만 하면 된다.

구문: enumerate(iterable, startIndex)

  • iterable: 반복할 수 있는 객체
  • startIndex: (선택 사항) 지정한 값부터 인덱스 증가. default = 0
words = ["apple", "water", "tree"]
for word in enumerate(words):
	print(word)

# 출력
(0, "apple")
(1, "water")
(2, "tree")

 

 

enumerate() 함수는 ...

기본적으로 인덱스와 원소로 이루어진 튜플(tuple)을 만들어 준다.

따라서 인덱스와 원소를 각각 다른 변수에 할당하고 싶다면 다음과 같이 인자 풀기(unpacking)을 해줘야 한다.

words = ["apple", "water", "tree"]
for i, word in enumerate(words):
	print(word)

# 출력
0 apple
1 water
2 tree

 


 

enumerate() 함수 사용법 1. 시작 인덱스 변경하기

enumerate() 함수의 두번째 매개변수는 startIndex이고, 선택사항이다.

시작 인덱스를 0이 아니라 1부터 시작하고 싶은 경우, enumerate()함수의 start 인자(두번째 매개변수 자리)에 시작하고 싶은 숫자를 넘기면 된다.

 

다만 여기서 주의할 점은 중간 인덱스부터 접근하는 것이 아니라, 인덱스 시작점만 지정한 숫자부터 시작하는 것이다.

words = ["apple", "water", "tree"]
for i, word in enumerate(words, start=1):
	print(word)

# 출력
1 apple
2 water
3 tree

start 인자를 1로 준다고 해서 words[1]부터 접근하는 것이 아니다!

 

# 같은 문장
enumerate(words, start=1)
enumerate(words, 1)

 


 

요약

for문으로 리스트 등 반복가능한 객체의 인덱스와 원소에 동시에 접근하기 위해서는 enumerate() 함수를 쓰는 것이 파이썬다운 코드다.

 

enumerate(iterable, startIndex)

  • iterable: 반복할 수 있는 객체
  • startIndex: (선택 사항) 지정한 값부터 인덱스 증가. default = 0

 

 

참고자료

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

https://www.entity.co.kr/entry/512-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%98-Enumerate-%ED%95%A8%EC%88%98-%EB%A3%A8%ED%94%84-%ED%8A%9C%ED%94%8C-%EB%AC%B8%EC%9E%90%EC%97%B4

728x90
반응형