복붙노트

[PYTHON] 범위 (시작, 끝)에 끝이 포함되지 않는 이유는 무엇입니까?

PYTHON

범위 (시작, 끝)에 끝이 포함되지 않는 이유는 무엇입니까?

>>> range(1,11)

너를 준다.

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

왜 1-11입니까?

그들은 무작위로 그렇게하기로 결정 했나요? 아니면 제가 볼 수없는 어떤 가치가 있습니까?

해결법

  1. ==============================

    1.len (range (0, 10))과 같은 10 개의 요소를 포함하는 [0,1,2,3,4,5,6,7,8,9]을 반환하는 range (0, 10)를 호출하는 것이 더 일반적이기 때문에 . 프로그래머는 0 기반 인덱싱을 선호합니다.

    len (range (0, 10))과 같은 10 개의 요소를 포함하는 [0,1,2,3,4,5,6,7,8,9]을 반환하는 range (0, 10)를 호출하는 것이 더 일반적이기 때문에 . 프로그래머는 0 기반 인덱싱을 선호합니다.

    또한 다음과 같은 공통 코드 스 니펫을 고려하십시오.

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

    range ()가 정확히 len (li)까지 올라가면 이것이 문제가된다는 것을 알 수 있습니까? 프로그래머는 명시 적으로 1을 뺄 필요가 있습니다. 이것은 (int i = 0; i <= 9; i ++)에 대해 (int i = 0; i <10; i ++) 선호하는 프로그래머의 일반적인 경향을 따릅니다.

    범위를 1로 자주 호출하는 경우 사용자 고유의 함수를 정의 할 수 있습니다.

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

    2.독점 범위에는 몇 가지 이점이 있습니다.

    독점 범위에는 몇 가지 이점이 있습니다.

    한 가지로 범위 (0, n)의 각 항목은 길이가 n 인 목록에 대한 유효한 색인입니다.

    또한 range (0, n)는 n의 길이를 가지며 n + 1이 아닌 포괄적 인 범위를가집니다.

  3. ==============================

    3.이것은 0부터 시작하는 인덱싱과 len ()과 함께 잘 작동합니다. 예를 들어, 목록 x에 10 개의 항목이 있으면 0-9까지 번호가 매겨집니다. 범위 (len (x))는 0-9를 제공합니다.

    이것은 0부터 시작하는 인덱싱과 len ()과 함께 잘 작동합니다. 예를 들어, 목록 x에 10 개의 항목이 있으면 0-9까지 번호가 매겨집니다. 범위 (len (x))는 0-9를 제공합니다.

    물론, 사람들은 x 또는 범위의 항목에 대해 더 Python 적이라고 알려줄 것입니다. 범위 (len (x))가 아닌 enumerate (x)의 항목입니다.

    조각은 이렇게 작동합니다. foo [1 : 4]는 foo의 항목 1-3입니다 (항목 1은 실제로는 0부터 시작하는 색인으로 인해 두 번째 항목이라는 것을 명심하십시오). 일관성을 위해 둘 다 같은 방식으로 작동해야합니다.

    나는 이것을 "당신이 원하는 첫 번째 숫자 다음에 원하는 숫자로 시작하는 숫자"라고 생각합니다. 1-10을 원한다면 원하지 않는 첫 번째 숫자는 11이므로 범위 (1, 11)입니다.

    특정 응용 프로그램에서 성가 시게된다면 끝 색인에 1을 추가하고 range ()를 호출하는 작은 도우미 함수를 작성하기 만하면됩니다.

  4. ==============================

    4.여기에 몇 가지 유용한 알고리즘 설명이 있지만,이 방법을 사용하는 이유에 대한 간단한 '실생활'추론을 추가하는 데 도움이 될 수 있다고 생각합니다. 새 이민자에게 주제를 소개 할 때 유용하다고 생각합니다.

    여기에 몇 가지 유용한 알고리즘 설명이 있지만,이 방법을 사용하는 이유에 대한 간단한 '실생활'추론을 추가하는 데 도움이 될 수 있다고 생각합니다. 새 이민자에게 주제를 소개 할 때 유용하다고 생각합니다.

    '범위 (1,10)'와 같은 것으로, 한 쌍의 매개 변수가 "시작과 끝"을 나타내는 것으로 생각하면 혼동이 생길 수 있습니다.

    그것은 실제로 시작 및 "중지"입니다.

    이제는 "끝"값인 경우 숫자가 시퀀스의 마지막 항목으로 포함될 것으로 예상 할 수 있습니다. 그러나 그것은 "끝"이 아닙니다.

    다른 사람들은 'range (n)'만을 사용하면 물론 'n'번 반복하기 때문에 실수로 해당 매개 변수를 "count"라고 부릅니다. 이 논리는 시작 매개 변수를 추가 할 때 세분화됩니다.

    핵심 포인트는 이름을 기억하는 것입니다 : "중지". 즉 도달했을 때 반복이 즉시 중단되는 지점을 의미합니다. 그 시점 이후.

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

    아이에게이 설명에 사용한 한 가지 비유는 아이러니하게도 아이들보다 행동하는 것이 낫다는 것입니다! 그것은 예정된 후에 멈추지 않습니다. 그것은 마치 그것이하고있는 일을 마치지 않고 즉시 멈 춥니 다. (그들은 이것을 얻는다;))

    또 다른 비유 - 차를 운전할 때 정지 / 출력 / '줄을'표시를 지나치지 않고 차 옆이나 뒤쪽에 앉아 있습니다. 기술적으로 당신이 멈추었을 때 당신은 아직 그것에 도달하지 못했습니다. 그것은 '당신이 여행을 떠난 것'에 포함되어 있지 않습니다.

    그 중 일부가 Pythonitos / Pythonitas에 설명하는 데 도움이되기를 바랍니다.

  5. ==============================

    5.또한 범위 분할에 유용합니다. 범위 (a, b)는 범위 (a, x)와 범위 (x, b)로 나눌 수 있지만 범위를 포함하면 x-1 또는 x + 1을 쓸 수 있습니다. 범위를 분할 할 필요는 거의 없지만 목록을 자주 분할하는 경향이 있습니다. 목록 l [a : b]를 분할하는 이유 중 하나는 a 번째 요소는 포함하지만 b 번째 요소는 포함하지 않는 이유 중 하나입니다. 그런 다음 동일한 속성을 갖는 범위는 일관되게 멋지게 만듭니다.

    또한 범위 분할에 유용합니다. 범위 (a, b)는 범위 (a, x)와 범위 (x, b)로 나눌 수 있지만 범위를 포함하면 x-1 또는 x + 1을 쓸 수 있습니다. 범위를 분할 할 필요는 거의 없지만 목록을 자주 분할하는 경향이 있습니다. 목록 l [a : b]를 분할하는 이유 중 하나는 a 번째 요소는 포함하지만 b 번째 요소는 포함하지 않는 이유 중 하나입니다. 그런 다음 동일한 속성을 갖는 범위는 일관되게 멋지게 만듭니다.

  6. ==============================

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

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

    그것은 다음과 같은 것과 매우 비슷합니다 :

    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
    
  7. ==============================

    7.코드를 고려해보십시오.

    코드를 고려해보십시오.

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

    아이디어는 길이 y-x의 목록을 얻는 것입니다. 위에서 볼 수 있듯이 반복 할 수 있습니다.

    범위에 대한 파이썬 문서를 읽어보십시오 - 그들은 for 루프 반복을 기본 유스 케이스라고 생각합니다.

  8. ==============================

    8.기본적으로 파이썬 범위 (n)에서 n 번 반복합니다. 이것은 인쇄 할 때 최종 값을 제공하지 않는 독점적 인 특성이므로 우리는 다음과 같은 함수를 생성 할 수 있습니다. 포함 된 값은 range에 언급 된 마지막 값을 출력 함을 의미합니다.

    기본적으로 파이썬 범위 (n)에서 n 번 반복합니다. 이것은 인쇄 할 때 최종 값을 제공하지 않는 독점적 인 특성이므로 우리는 다음과 같은 함수를 생성 할 수 있습니다. 포함 된 값은 range에 언급 된 마지막 값을 출력 함을 의미합니다.

    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()
    
  9. from https://stackoverflow.com/questions/4504662/why-does-rangestart-end-not-include-end by cc-by-sa and MIT license