[코딩의 기술] 7. range보다는 enumerate를 사용하라◎ Python/코딩의 기술 (책)2023. 4. 30. 18:31
Table of Contents
반응형
range
range는 어떤 정수 집합을 반복해야 하는 과정이 필요할 때 유용하다.
from random import randint
random_bits = 0
for i in range(32):
if randint(0, 1):
random_bits |= 1 << i
# random_bits = random_bits | 1 << i
print(bin(random_bits))
>>>
0b11001000000001100000010110010
위 코드는 실행할 때 마다 랜덤한 값이 나온다. 9번째 줄에 있는 randint 덕분에 random_bits |= 1 << i가 랜덤하게 실행되기 때문이다. (random_bits |= 1 << i가 헷갈린다면 여기를 참고해보자.)
list에 존재하는 값들을 차례대로 출력할 때, 더 보기 좋도록 혹은 몇 번째 원소를 처리 중인지 알고 싶을 때 앞에 숫자를 넣기 위해 range를 사용하기도 한다.
color_list = ['빨강', '파랑', '노랑', '초록']
for i in range(len(color_list)):
print(f'{i + 1}: {color_list[i]}')
>>>
1: 빨강
2: 파랑
3: 노랑
4: 초록
허나 위 코드는 조금은 투박해 보인다. 몇 번째 원소를 접근 중인지 알기 위해 리스트의 크기를 알아야 하고, 인덱싱을 사용해 배열 원소에 접근해야 한다. 코드가 짧으니 알아보기 쉽겠지만 단계가 많아 나중에 코드가 길어지면 읽기 어려워진다.
enumerate
파이썬은 이러한 문제를 해결하기 위해 enumerate 내장 함수를 제공한다. enumerate는 이터레이터를 지연 계산 제네레이터로 감싼다. 고로 enumerate는 루프 인덱스와 이터레이터의 다음 값으로 이뤄진 쌍을 넘겨주게 된다. next 내장 함수를 이용해 어떻게 작동하는지 아래 코드로 보자.
color_list = ['빨강', '파랑', '노랑', '초록']
it = enumerate(color_list)
print(next(it))
print(next(it))
>>>
(0, '빨강')
(1, '파랑')
위와 같은 특성을 활용해 range를 이용하기보다 enumerate를 이용하면 더 깔끔하게 짤 수 있다. 언패킹을 이용하자.
color_list = ['빨강', '파랑', '노랑', '초록']
for i, color in enumerate(color_list):
print(f'{i + 1}: {color}')
>>>
1: 빨강
2: 파랑
3: 노랑
4: 초록
참고
- 파이썬 코딩의 기술 - 똑똑하게 코딩하는 법, 브렛 슬라킨 저/오현석 역
반응형
'◎ Python > 코딩의 기술 (책)' 카테고리의 다른 글
[코딩의 기술] 6. 인덱스보다는 대입을 사용해 데이터를 언패킹하자 (1) | 2022.11.30 |
---|---|
[코딩의 기술] 5. 복잡한 식을 쓰는 대신 도우미(헬퍼) 함수를 작성하자 (0) | 2022.11.29 |
[코딩의 기술] 4. f-문자열을 통한 인터폴레이션을 사용하라 (1) | 2022.11.28 |
[코딩의 기술] 3. bytes와 str의 차이를 알자 (0) | 2022.11.27 |
[코딩의 기술] 2. PEP 8 스타일 가이드를 따르자 (2) | 2022.09.15 |
@Reo :: 코드 아카이브
자기계발 블로그