Python

range보다는 enumerate를 사용하자

말하는감자 2018. 10. 24. 15:45

내장 함수 range는 정수 집합을 순회하는 루프를 실행할 때 유용하다


from random import *



flavor_list = ['vanilla', 'chocolate', 'pecan', 'strawberry']

for flavor in flavor_list:

    print('%s is delicius' % flavor)


% -> 쉼표 없음


vanilla is delicius

chocolate is delicius

pecan is delicius

strawberry is delicius


리스트의 길이를 알아야지 돌릴 수 있다

배열을 인덱스로 접근해야 한다

가독성이 낮다


for i in range(len(flavor_list)):

    flavor = flavor_list[i]

    print('%d: %s' % (i+1, flavor))


1: vanilla

2: chocolate

3: pecan

4: strawberry


위의 문제를 해결하기 위해서 enumerate를 제공한다

enumerate는 lazy generator로 이터레이터를 감싼다

이 제너레이터는 이터레이터에서 루프 인덱스와 다음 값을 한 쌍으로 가져와 넘겨준다

enumerate로 작성한 코드는 훨씬 이해하기 쉽다


for i, flvors in enumerate(flavor_list):

    print('%d: %s' % (i + 1, flvors))


1: vanilla

2: chocolate

3: pecan

4: strawberry


enuemrate로 세기 시작할 숫자를 지정하면 코드를 더 짧게 만들 수 있다


for i, flavoz in enumerate(flavor_list, 1):

    print('%d: %s' % (i, flavoz))


1: vanilla

2: chocolate

3: pecan

4: strawberry



정리

enuemrate는 이터레이터를 순회하면서 이터레이터에서 각 아이템의 인덱스를 얻어오는 간결한 문법을 제공한다

range로 루프를 실행하고 시퀀스에 인덱스로 접근하기보다는 enumerate를 사용하는 것이 좋다

enumerate에 두번째 파라미터를 사용하면 세기 시작할 숫자를 지정할 수 있다(default = 0)


'Python' 카테고리의 다른 글

scraping issue handle  (0) 2020.12.20
pymysql  (0) 2020.06.01
range보다는 enumerate를 사용하자  (0) 2018.10.24