programing

range(start, end)에 end가 포함되지 않는 이유는 무엇입니까?

goodsources 2023. 1. 3. 21:48
반응형

range(start, end)에 end가 포함되지 않는 이유는 무엇입니까?

>>> range(1,11)

주다

[1,2,3,4,5,6,7,8,9,10]

1-11은 왜 안 돼?

그들이 무작위로 그렇게 하기로 한 걸까 아니면 내가 보지 못하는 가치가 있는 걸까?

게 이니까.range(0, 10) 결과, 반환하다[0,1,2,3,4,5,6,7,8,9] 10개의 원소는 10개의 원소와 10개의 원소가 들어있습니다.len(range(0, 10))프로그래머는 0 베이스의 인덱싱을 선호합니다.

또, 다음의 일반적인 코드 스니펫에 대해서도 생각해 주세요.

for i in range(len(li)):
    pass

혹시나면알아볼수있나요?range()까지 len(li)게게문 제제 ?? ???프로그래머는 명시적으로 1을 빼야 합니다.이것은 프로그래머들이 선호하는 일반적인 트렌드를 따르기도 한다.for(int i = 0; i < 10; i++)에 걸쳐서for(int i = 0; i <= 9; i++).

1 로 시작하는 콜 범위를 자주 설정하는 경우는, 독자적인 함수를 정의할 필요가 있습니다.

>>> def range1(start, end):
...     return range(start, end+1)
...
>>> range1(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

여기에는 몇 가지 유용한 알고리즘 설명이 있지만, 왜 이렇게 기능하는지에 대한 간단한 '실생활' 추론을 추가하는 것이 도움이 될 수 있다고 생각합니다.이것은 젊은 신참자에게 이 주제를 소개할 때 유용하다고 생각합니다.

'범위(1,10)'와 같은 경우에는 매개변수 쌍이 "시작과 끝"을 나타낸다고 생각하기 때문에 혼란이 발생할 수 있습니다.

그것은 실제로 시작과 "정지"입니다.

이 "종료" 값일 경우 해당 번호가 시퀀스의 최종 엔트리로 포함될 것으로 예상할 수 있습니다.하지만 그것은 끝이 아니다.

다른 사람들은 이 파라미터를 "count"라고 잘못 부르는데, 이는 "range(n)"만 사용하면 당연히 "n"번 반복되기 때문입니다.이 로직은 시작 파라미터를 추가하면 분해됩니다.

그래서 핵심은 그 이름을 기억하는 것이다: "정지"즉, 도달했을 때 반복이 즉시 중지되는 지점입니다.그 이후론 안

따라서 "시작"은 실제로 포함되는 첫 번째 값을 나타내지만 "정지" 값에 도달하면 "그것도" 처리를 계속하지 않고 중단됩니다.

내가 이것을 아이들에게 설명할 때 사용한 비유 중 하나는 아이러니하게도, 그것이 아이들보다 더 잘 행동한다는 것이다!원래 하던 일을 끝내지 않고 바로 멈춥니다. (이것들을 알 수 있습니다; )

또 다른 비유는 차를 운전할 때 정지/양보/'양보' 표지판을 통과하지 않고 차 옆이나 뒤에 놓여 있는 것입니다.엄밀히 말하면 멈출 때도 아직 도달하지 못한 거야'여행 중에 지나온 물건'에는 포함되지 않습니다.

Pythonitos/Pythonitas에게 설명하는데 도움이 되길 바랍니다!

배타적 범위에는 다음과 같은 이점이 있습니다.

★★★★★★★★★★★★★★의 각 range(0,n)는 길이 입니다.n.

한 also도.range(0,n)의 길이를 가지다n 아니라, 이에요.n+1★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

합니다.len() 목록에 10개의 항목이 있습니다x0에서 9까지입니다. range(len(x))9.0~9이 되다.

피토닉이 피토닉이 더 하겠죠?for item in x ★★★★★★★★★★★★★★★★★」for index, item in enumerate(x)for i in range(len(x)).

그런 으로 작용합니다.foo[1:4]입니다.foo(항목 1은 제로베이스 인덱싱으로 인해 실제로는 두 번째 항목임을 유의하십시오).일관성을 유지하기 위해 둘 다 같은 방식으로 작동해야 합니다.

저는 "원하는 첫 번째 숫자, 그리고 원하지 않는 첫 번째 숫자"라고 생각합니다.1-10을 원하시면, 제일 먼저 원하지 않는 번호는 11이 되겠습니다.range(1, 11).

하여 1을 호출하는 를 쉽게 쓸 수range().

range(a,b) 나눌 수 range(a, x) ★★★★★★★★★★★★★★★★★」range(x, b)는 '인가', '어느쪽인가', '어느쪽인가', '어느쪽인가', '어느쪽인가', '어느쪽인가', '어느쪽이든', '어느쪽이든',x-1 ★★★★★★★★★★★★★★★★★」x+1는 거의 꽤 하는 중 입니다.l[a:b]a번째 요소는 포함하지만 b번째 요소는 포함하지 않습니다. ★★★★★★★★★★★★★★★.range같은 성질을 가진다는 건 꽤 일관성이 있다는 거죠

범위의 길이는 맨 위 값에서 맨 아래 값을 뺀 값입니다.

이것은 다음과 같은 것과 매우 유사합니다.

for (var i = 1; i < 11; i++) {
    //i goes from 1 to 10 in here
}

C스타일의 언어로.

또한 Ruby의 범위와 유사합니다.

1...11 #this is a range from 1 to 10

그러나 Ruby는 터미널 값을 포함하기를 원하는 경우가 많다는 것을 인식하고 대체 구문을 제공합니다.

1..10 #this is also a range from 1 to 10

코드를 고려하다

for i in range(10):
    print "You'll see this 10 times", i

는 '길이의 '를 수 입니다.y-x이데올로기 때문에

python docs for range를 읽어보십시오.이 문서는 for-loop 반복을 주요 사용 사례로 간주합니다.

으로는 python(python)입니다.range(n)n시간(times)은 배타적인 특성 때문에 인쇄될 때 마지막 값을 제공하지 않습니다. 포함 값을 제공하는 함수를 만들 수 있습니다. 즉, 범위 내에서 언급된 마지막 값도 인쇄됩니다.

def main():
    for i in inclusive_range(25):
        print(i, sep=" ")


def inclusive_range(*args):
    numargs = len(args)
    if numargs == 0:
        raise TypeError("you need to write at least a value")
    elif numargs == 1:
        stop = args[0]
        start = 0
        step = 1
    elif numargs == 2:
        (start, stop) = args
        step = 1
    elif numargs == 3:
        (start, stop, step) = args
    else:
        raise TypeError("Inclusive range was expected at most 3 arguments,got {}".format(numargs))
    i = start
    while i <= stop:
        yield i
        i += step


if __name__ == "__main__":
    main()

range(n)in python은 0에서 n-1로 반환됩니다.각각,range(1,n)1 ~ n-1 입니다.따라서 첫 번째 값을 생략하고 마지막 값(n)을 얻으려면 다음 코드를 사용하면 됩니다.

for i in range(1, n + 1):
        print(i) #prints from 1 to n

단지 많은 경우에 대해 추론하는 것이 더 편리할 뿐이다.

는'와 '어느 정도' 이라고 볼 수 있습니다.start ★★★★★★★★★★★★★★★★★」end.start <= end는 '간격'입니다.end - start.len실제로는 길이로 정의되어 있습니다.다음과 같이 됩니다.

len(range(start, end)) == start - end

그러나 구간의 길이를 측정하는 대신 범위에 포함된 정수를 계산합니다.위의 속성을 true로 유지하려면 엔드포인트 중 하나를 포함하고 다른 엔드포인트는 제외해야 합니다.

의 추가step파라미터는 길이의 단위를 도입하는 것과 같습니다.때는 수 있을 거예요.

len(range(start, end, step)) == (start - end) / step

길게.카운트를 얻으려면 정수 나눗셈만 사용합니다.

언급URL : https://stackoverflow.com/questions/4504662/why-does-rangestart-end-not-include-end

반응형