..
Range 보단 enumrate
range
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))
>>>
0b10101000010101010011010
문자열 로 이뤄진 list 처럼 이터레이션 할 대상 데이터 구조가 있으면 이 시퀀스에대해 바로 루프를 돌 수 있다.
num_list = ['one','two','three']
for num in num_list:
print(f'{num}')
>>>
one
two
three
리스트를 이터레이션 하면서 몇번쨰 원소를 처리하는지 알아야할 떄가 있다. 이떄 range 를 사용하는 방법을 보자.
for i in range(len(num_list)):
num_index = num_list[i]
print(f'{i+1} : {num_index}')
>>>
1 : one
2 : two
3 : three
list 나 range 에 대해 이터레이션을 수행하는 다른 예제와 비교해보면 이 코드는 투박하다고 한다.(난 잘 모르겠는데) List 의 길이를 알아야 하며 인덱스를 사용해 배열 원소에 접근해야한다. 이렇게 단계가 여러개이므로 코드를 읽기 어렵다고한다.
이런문제를 해결하기위해 파이썬은 enumrate 내장함수를 제공한다.
it = enumrate(num_list)
print(next(it))
print(next(it))
>>>
(1,'one')
(2,'two')
enumrate 가 넘겨주는 각 쌍을 for 문에서 간결하게 언패킹할수 있다.
for i,num in enumrate(num_list):
print(f'{i+1} : {num}')
>>>
1 : one
2 : two
3 : three
enumrate 의 두번째 파라미터 로 어디서부터 수를 세기 시작할지 지정할수 있다.
jumps = enumrate(num_list,1)