LainyZine: 프로그래머 가이드 🐣

[Python] range 함수 사용법

파이썬에서는 숫자 범위를 나타내는 range 타입이 있습니다. range 타입은 0부터 특정 숫자까지의 범위나, 두 숫자 사이의 범위, 혹은 특정 숫자만큼 증가하는 등차수열 등을 나타낼 수 있습니다. range 타입을 정의할 때는 range() 함수를 사용하며, range 타입을 for와 같은 반복문에서 바로 사용하는 것이 가능합니다. 이 글에서는 range() 함수의 사용법을 자세히 알아봅니다.

range 타입과 range() 함수

파이썬에서는 범위를 나타내는 range 타입이 있고, 이를 만들 수 있는 생성자 합수가 바로 range()입니다. range() 함수로 생성된 객체는 특정한 범위를 나타내지만 그 자체가 리스트는 아닙니다. 따라서 print로 출력하더라도 숫자 목록이 출력되지는 않습니다. 예를 들어 range(5) 함수를 실행하면 0부터 4까지를 나타내는 range 객체가 생성됩니다.

>>> r = range(5)
>>> print(r)
range(0, 4)

range 범위에 포함된 모든 값을 리스트로 만들려면 list() 함수를 사용해야합니다.

>>> print(list(r))
[0, 1, 2, 3, 4]

하지만 range 객체를 for문에서 사용하기 위해 매번 list() 함수를 실행할 필요는 없습니다. range 타입 자체가 반복가능한(iterable) 객체이므로 for문에서 바로 사용하는 것이 가능합니다. 아래는 for 문을 사용하는 예제입니다.

>>> for i in list(r): print(i)
0
1
2
3
4

>>> for i in r: print(i)
0
1
2
3
4

range(stop): 0부터 stop까지 range 객체 생성

range 함수는 크게 2가지 사용법이 있습니다만, 먼저 간단한 형태부터 살펴보겠습니다. range의 하나의 인자 stop을 지정하면, 0부터 stop까지 1씩 증가하는 range 객체가 생성됩니다. 이 때 stop으로 지정한 경계값은 range에 포함되지 않습니다. 예를 들어 range(5)에는 5가 포함되지 않습니다.

>>> print(list(range(1)))
[0]

>>> print(list(range(5)))
[0, 1, 2, 3, 4]

>>> print(list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

범위의 시작값이 0으로 고정되어있기 때문에 stop 인자의 값을 0이나 음수로 지정하면 사실상 빈 range 객체가 생성됩니다.

>>> print(range(0))
range(0, 0)
>>> print(list(range(0)))
[]

>>> print(range(-100))
range(0, -100)
>>> print(list(range(-100)))
[]

range(start, stop[, step]): 두 숫자 사이의 range 만들기

range 함수의 두 번째 형식에서는 최소 2개의 인자를 지정해야합니다. 첫 번째 start 인자는 range의 시작값을 지정하며, stop에는 범위의 끝값을 지정합니다. 이 때도 stop 인자의 값은 range에 포함되지 않는다는 점을 주의해주세요.

>>> print(list(range(0, 10)))
# start 값이 0인 경우 range(0,10)과 range(10)의 결과는 같습니다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> print(list(range(1, 10)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> print(list(range(13, 17)))
[13, 14, 15, 16]

이 때 stopstart와 같거나 작으면 빈 range가 생성됩니다.

>>> print(range(25, 20))
range(25, 20)

>>> print(list(range(25, 20)))
[]

range(start, stop[, step]): 등차수열 만들기

range는 최대 3개의 인자를 지정할 수 있습니다. 앞서 range 함수로 생성한 범위는 공차가 1인 등차수열이라고 할 수 있으며, 마지막 인자 step이 1인 경우에 해당합니다. 아래 경우는 모두 1에서 9까지 숫자를 포함하는 범위 객체입니다.

>>> print(list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(list(range(0, 10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(list(range(0, 10, 1)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

step 인자를 변경하면, 원하는 공차의 등차수열을 만들 수 있습니다.

>>> print(list(range(1, 100, 11)))
[1, 12, 23, 34, 45, 56, 67, 78, 89]

>>> print(list(range(3, 27, 4)))
[3, 7, 11, 15, 19, 23]

>>> print(list(range(6, 24, 3)))
[6, 9, 12, 15, 18, 21]

숫자가 줄어드는 range 객체

기본적으로 range 객체에서는 숫자가 증가하지만, step 인자를 음수로 지정하면 숫자가 줄어드는 range 객체를 만들 수도 있습니다. 이 때 주의할 점이 step이 양수인 경우와는 반대로 startstop의 값과 같거나 작은 경우 빈 범위가 됩니다.

>>> print(list(range(10, 0, -1)))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

>>> print(list(range(10, 0, -2)))
[10, 8, 6, 4, 2]

>>> print(list(range(10, 10, -1)))
[]

step을 음수로 지정하는 것도 방법입니다만, 인자 지정이나 경계값이 헷갈립니다. 예를 들어 9에서 0까지를 나타내는 range 객체를 생성하는 코드는 range(9, -1, -1)입니다. range(1, 10) 객체를 만들고 뒤집으면 조금 더 쉽게 같은 의미를 가진 range 객체를 생성할 수 있습니다. range 객체를 역순 정렬할 때는 reversed 함수를 사용합니다.

>>> print(range(9, -1, -1))
range(10, 0, -1)
>>> print(list(range(10, 0, -1)))
[9, 8, 7, 6, 5, 4, 3, 2, 1]

>>> print(reversed(range(1, 10)))
<range_iterator object at 0x1051a8060>
>>> print(list(reversed(range(1, 10))))
[9, 8, 7, 6, 5, 4, 3, 2, 1]

reversed 함수는 리스트로 변환하지 않더라도 range 객체에 바로 사용할 수 있습니다. 또한 역순 정렬된 객체도 for 문에서 바로 사용할 수 있습니다.

>>> for i in reversed(range(1, 5)): print(i)
4
3
2
1

range는 파이썬에서 활용도가 매우 높으니, 꼭 직접 실행해보면서 익혀두시는 걸 추천합니다.

참고 문서

range 객체를 생성하는 생성자 range() 함수에 대한 공식 정도는 다음 문서를 참고해주세요.

LainyZine은 쿠팡 파트너스 활동에 따른 수수료를 제공받습니다.