본문 바로가기
Studying/Python

[Python] 내장함수 range 구현

by giem 2022. 5. 18.
반응형

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))

 

잘 구현된 것을 볼 수 있다.

반응형

댓글