[Python Chapter1 10]


본 포스팅은 파이썬코딩의기술 이라는 책을 참고하여 개인 공부를 하면서 정리하고 있습니다.

문제 될 시 삭제하겠습니다.

Chapter 1

10. range보다는 enumerate를 사용하자

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

from random import randint

random_bit = 0
for i in range(64):
    if randint(0, 1):
        random_bit |= 1 << i

문자열의 리스트 같은 순회할 자료 구조가 있을 때 직접 루프를 실행 할 수 있음

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

for flavor in flavor_list:
    print('%s is delicious' % flavor)

종종 리스트를 순회하거나 리스트의 현재 아이템의 인덱스를 알고 싶은 경우

예를 들어 좋아하는 아이스크림의 순위를 출력하고 싶다면?

# range를 사용
for i in range(len(flavor_list)):
    flavor = flavor_list[i]
    print('%d: %s' % (i + 1, flavor))

위의 코드는 세련되지 못함

리스트의 길이를 알아내야 하고, 배열을 인덱스로 접근해야 하며, 읽기가 불편

파이썬은 이런 상황을 처리하려고 내장 함수 enumerate를 제공

이 함수는 지연 제너레이터(lazy generator)로 이터레이터를 감싼다

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

# enumerate로 작성한 코드
for i, flavor in enumerate(flavor_list):
    print('%d: %s' % (i + 1, flavor))

>>>
1 : vanilla
2 : chocolate
3 : pecan
4 : strawberry

또한 enumerate에 추가 인자를 넣어서 인덱스의 시작값을 설정 가능

for i, flavor in enumerate(flavor_list, 1):
	print('%d: %s' % (i, flavor))

정리

  • enumerate는 이터레이터를 순회화면서 이터레이터에서 각 아이템의 인덱스를 얻어오는 간결한 문법을 제공
  • range로 루프를 실행하고 시퀀스에 인덱스로 접근하기보다는 enumerate를 사용하는 게 좋음
  • enumerate에 두 번째 파라미터를 사용하면 세기 시작할 숫자를 지정할 수 있음(기본값 0)





© 2018. by Dev_Yonghee

Powered by Dev_Yong