형식
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