반응형
range에 대해 알아보려 한다.
사실 range의 형태를 정의하자면 내장'함수'라기보다 '불변 시퀀스' 형이다.
for문에서 특정 횟수만큼 반복하는데 자주 사용한다.
range 사용 예시를 보면 다음과 같다.
list(range(10)) #0이상 10 미만 -> 인자가 하나일 때는 start = 0고정, end는 인자값
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(1, 11)) #1이상 11미만 -> 인자가 두개일 때는 start, end로 취급
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(range(0, 30, 5)) #0에서 30까지 5씩 건너뛰면서 -> 인자가 3개일 때는 start, end, step으로 취급
#[0, 5, 10, 15, 20, 25]
list(range(0, 10, 3))
#[0, 3, 6, 9]
list(range(0, -10, -1))
#[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
list(range(0))
#[]
list(range(1, 0))
#[]
사용법을 알았으니 구현해보겠다.
인자의 개수가 1~3개인데 각 케이스를 나눠야 하고 그만큼 while loop를 돌며 값을 생산하면 된다.
def my_range(*args):
if len(args)==1:
start, end, step = 0, args[0],1
elif len(args)==3:
start, end, step = args[0], args[1], args[2]
else:
start, end, step = args[0], args[1], 1
while((step>0 and start<end)or(step<0 and start>end)):
yield start
start+=step
그럼 테스트 해보겠다.
assert list(range(10)) == list(my_range(10))
assert list(range(3, 10)) == list(my_range(3, 10))
assert list(range(3, 10, 2)) == list(my_range(3, 10, 2))
assert list(range(10, 3, -2)) == list(my_range(10, 3, -2))
잘 구현된 것을 볼 수 있다.
반응형
'Studying > Python' 카테고리의 다른 글
[Python] 내장함수 filter 구현 (0) | 2022.05.18 |
---|---|
[Python] 내장함수 reversed 구현 (0) | 2022.05.18 |
[Python] 내장함수 max, min 구현 (0) | 2022.05.16 |
[Python] 내장함수 enumerate 구현 (0) | 2022.05.15 |
[Python] 내장함수 round 구현 (0) | 2022.05.15 |
댓글