파이썬 range 끝값 제외와 역방향 범위가 비는 이유

이 카테고리 글 목록

전체글 보기

range()의 stop 값은 결과에 포함되지 않습니다. 1부터 5까지는 range(1, 6), 5부터 1까지는 range(5, 0, -1)로 만들 수 있습니다. 시작값이 끝값보다 크다고 자동으로 역방향이 되는 것은 아닙니다.

print("1부터 5까지", list(range(1, 6)))
print("기본 step", list(range(5, 1)))
print("음수 step", list(range(5, 1, -1)))
print("1도 포함", list(range(5, 0, -1)))
1부터 5까지 [1, 2, 3, 4, 5]
기본 step []
음수 step [5, 4, 3, 2]
1도 포함 [5, 4, 3, 2, 1]

끝값 제외와 진행 방향은 서로 다른 조건입니다

range(start, stop, step)에서 step을 생략하면 1입니다. 양수 간격이면 stop보다 작은 값만, 음수 간격이면 stop보다 큰 값만 만듭니다.

두 번째 줄의 range(5, 1)은 5에서 1씩 커지는 방향입니다. 시작값 5가 이미 끝 경계 1보다 작지 않으므로 빈 범위가 됩니다. 세 번째 줄은 간격을 -1로 바꿔 5·4·3·2로 내려가지만, 끝값 1은 제외합니다. 마지막 줄에서는 경계를 0으로 옮겼으므로 1까지 들어갑니다.

시작값과 끝값이 같을 때도 끝값 제외 규칙 때문에 빈 범위입니다. range(5)처럼 인자를 하나만 주면 시작값은 0, 간격은 1이어서 0부터 4까지입니다.

간격이 2라면 끝 경계만 바꿔도 빠지는 값이 있습니다

1에서 2씩 움직이는 범위에 7을 포함하고 싶다면, 경계는 7보다 커야 합니다. 다음 두 줄은 시작값과 간격을 그대로 두고 경계만 바꿉니다.

print("stop=7", list(range(1, 7, 2)))
print("stop=8", list(range(1, 8, 2)))
stop=7 [1, 3, 5]
stop=8 [1, 3, 5, 7]

첫 줄은 7이 끝값이어서 빠지고, 둘째 줄은 7이 8보다 작으므로 들어갑니다. 다만 이 수열은 홀수만 지나갑니다. 끝 경계를 조정한다고 6 같은 짝수가 생기는 것은 아닙니다. 원하는 마지막 값이 시작값과 간격으로 도달할 수 있는 값인지도 확인하세요.

step에 0을 주면 빈 범위가 아니라 오류입니다

try:
    range(1, 5, 0)
except ValueError as error:
    print(type(error).__name__)
ValueError

range()의 인자는 정수 또는 정수 인덱스로 해석될 수 있는 객체여야 합니다. 일반적인 실수 간격 0.5를 넣는 도구는 아닙니다.

예제의 list(...)는 만들어지는 값을 펼쳐 보여주기 위한 것입니다. 반복문에서는 range()를 그대로 순회할 수 있습니다. 이미 있는 기록을 오름차순·내림차순으로 재배열하려는 문제라면 범위 생성과 구분해 여러 기준으로 목록 정렬하기를 참고하세요.

설명용 정수 입력은 Windows 11의 Python 3.14.3에서 각 코드 블록을 독립 실행했습니다. 시작값·끝값·간격의 정확한 조건은 Python의 range 문서에 정리돼 있습니다.

이 카테고리의 다른 글

전체글 보기

“파이썬 range 끝값 제외와 역방향 범위가 비는 이유”에 대한 1개의 생각

댓글 남기기