[파이썬] 내장함수 enumerate()

InAnarchy·2023년 4월 12일
2

Python

목록 보기
6/14
post-thumbnail

enumerate

  • 순서가 있는 자료형(list, set, tuple, dictionary, string)을 입력으로 받았을 때, 인덱스와 값을 포함하여 리턴
  • for문과 함께 자주 사용됨
  • 인덱스와 값을 동시에 접근하면서 루프를 돌리고 싶을 때 사용

형식

enumerate(순서가 있는 객체, start=0)
fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']

이 fruits 리스트를 예시로 들어보자.

print(fruits) 
#['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']

print(list(enumerate(fruits))) 
#[(0, 'orange'), (1, 'apple'), (2, 'pear'), (3, 'banana'), (4, 'kiwi'), (5, 'apple'), (6, 'banana')]

리스트를 그대로 프린트하면 그대로 나오지만
enumerate함수를 사용한 후 리스트로 바꾸니
각 요소의 인덱스값 리스트 쌍이 나왔다.

이것을 enumerate를 없이 for문만 사용해서 출력해보자.

start = 0
for _ in fruits:
  print(start, _, end = " ")
  start += 1

_

여담이지만 아무 생각없이

for i in fruits:
  print("{0} {1}".format(fruits.index(i),i), end = " ")

을 실행했더니

0 orange 1 apple 2 pear 3 banana 4 kiwi 1 apple 3 banana 

결과가 이상하게 나왔다.
index 메서드는 중복값이 있는 경우에 첫번째 값만 반환하기 때문이다.

_

다른 예제를 계속 보자.

for i,value in enumerate(['kim','lee','park','choi']):
  print(i,value, end = " ")
#0 kim 1 lee 2 park 3 choi 

enumerate() 의 매개변수 안에 리스트값이 담긴 변수를 넣어도 되고, 아예 리스트를 집어넣어도 된다.

for i,value in enumerate(['kim','lee','park','choi'], start = 1):
  print(i,value, end = " ")

또 start를 따로 설정하지 않는 경우 인덱스는 0부터 시작하지만
strat에 특정 값을 설정하면, 그 값부터 시작한다.

print(list(enumerate(input().split())))

다음과 같이 값을 input받고, 공백을 기준으로 나눈 값을
인덱스와 함께 리스트로 출력할 수도 있다.

입력: kim lee park choi
[(0, 'kim'), (1, 'lee'), (2, 'park'), (3, 'choi')]

순서가 있는 자료형이니 물론 문자열과 딕셔너리에도 사용할 수 있다.

str = "banana"
for _ in enumerate(str):
  print(_, end = " ") #(0, 'b') (1, 'a') (2, 'n') (3, 'a') (4, 'n') (5, 'a') 
dic = {"a":1, "b":2, "c":3, "d":4, "e":5}
for d in enumerate(dic):
  print(d, end = " ") #(0, 'a') (1, 'b') (2, 'c') (3, 'd') (4, 'e') 

REFERNCE
PYTHON DOCS

profile
github blog 쓰다가 관리하기 귀찮아서 돌아왔다

0개의 댓글