Batter way07

매일 공부(ML)·2022년 2월 3일
0

range보다는 enumerate사용

  • range함수는 어떤 정수 집합을 이터레이션하는 루프가 필요할 때 유용
from random import randint

random_bits = 0

for i in range(32):
    if randint(0,1):
        random_bits != 1 << i
        
print(bin(random_bits)) #0b110100010010000111000010000001

  • 문자열로 이뤄진 list처럼 이터레이션할 대상 데이터 구조가 있을 시 시퀀스에 대해 바로 루프 돌기
flavor_list = ['바닐라'. '초콜릿', '피칸', '딸기']

for flavor in flavor_list:
    print(f'{flavor} 맛있어요.')
    
#결과
바닐라 맛있어요
초콜릿 맛있어요
피칸 맛있어요
딸기 맛있어요

  • 리스트를 이터레이션하면서 리스트의 몇 번째 원소를 처리 중인 것을 알게 해준다.
for i in range(len(flavor_list)):
    flavor = flavor_list[i]
    print(f'{i + 1}: {flavor}')
    

#결과
1: 바닐라
2: 초콜릿
3: 피칸
4: 딸기

위의 예시들을 보면 어떤 생각이 드시나요?

코드가 투박해 보이고 리스트의 길이, 인덱스 사용을 위한 배열 원소등을 알아야하는 귀찮음도 보입니다. 그래서, 이것의 해결책을 파이썬에서 제공합니다. 바로 enumerate내장 함수 사용하기입니다.


it = enumerate(flavor_list)
print(next(it))
print(next(it))

#결과

(0, '바닐라')
(1, '초콜릿')

  • enumerate가 넘겨주는 각 쌍은 for문에서 간결하게 언패킹이 가능하여 코드가 깔끔해집니다.
for i flavor in enumerate(flavor_list):
    print(f'{i+1}: {flavor}')
    
#결과

1: 바닐라
2: 초콜릿
3: 피칸
4: 딸기

  • enumerate의 두 번째 파라미터로 어디부터 수를 세기 시잘할지 정하기가 가능하다.
for i, flavor in enumerate(flavor_list, 1):
    print(f'{i}: {flavor}')

정리

  • enumerate를 사용하면 이터레이터에 대해 루프를 돌아서 이터레이터에서 가져오는 원소의 인덱스까지 얻는 코드를 간결하게 작성 가능

  • range에 대해 루프를 돌면서 시퀀스의 원소를 enumerate를 사용

  • enumerate의 두 번째 파라미터로 어디부터 원소를 가져오기 시작할지 지정(디폴트 값은 0이다.)

profile
성장을 도울 아카이빙 블로그

0개의 댓글