스택큐힙리스트

range(start, end) 함수가 왜 end를 포함하지 않는가요? [중복] 본문

카테고리 없음

range(start, end) 함수가 왜 end를 포함하지 않는가요? [중복]

스택큐힙리스트 2023. 4. 5. 01:29
반응형

이 질문에 대한 답변이 이미 있습니다:

Why are slice and range upper-bound exclusive?

1. 영어를 한국어로 번역하세요.

2. 한국어로 말해주세요.

3. 한국어로 쓰여진 글을 읽을 수 있나요?

4. 한국어로 번역된 이메일을 받았는데 이해가 되지 않아요.

5. 한국어로 무엇이라고 말하고 싶으세요?

6. 한국어로 문제가 발생했을 때 어디서 도움을 받을 수 있나요?

3개월 전에 종료되었습니다.

>>> range(1,11)

너에게 준다

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

1-11 대신 왜 안되나요?

그들은 그것을 무작위로 그냥 그렇게 하기로 결정했나요, 아니면 나는 보이지 않는 어떤 가치가 있나요?

답변 1

range(0, 10)를 호출하면 보통 [0,1,2,3,4,5,6,7,8,9]를 반환하며, 이는 10개의 원소가 len(range(0, 10))와 동일합니다. 프로그래머들은 0을 기반으로 색인을 선호합니다.

또한 다음과 같은 일반적인 코드 스니펫을 고려하십시오:

for i in range(len(li)):

pass

range()가 정확히 len(li)까지 올라간다면 문제가 될 수 있다는 것을 알 수 있나요? 프로그래머는 명시적으로 1을 뺄 필요가 있습니다. 이것은 또한 프로그래머들이 for(int i = 0; i <= 9; i++) 대신 for(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

범위(start, end) 함수는 왜 end를 포함하지 않는 걸까요? 이 질문은 많은 파이썬 사용자들이 자주 묻는 질문 중 하나입니다. 왜냐하면 이것은 몇몇 다른 프로그래밍 언어와는 달리 파이썬에서 불완전한 것처럼 느껴지기 때문입니다.

우선, range 함수는 시작과 끝 값 사이의 정수 시퀀스를 만듭니다. start 값 부터 end-1 값까지 정수 시퀀스를 만들어 리턴하는데, 이것은 end 값을 포함하지 않는 이유가 있습니다.

이것은 가장 먼저, 인덱싱과 슬라이싱의 작동 원리와 관련이 있습니다. 파이썬에서 인덱싱과 슬라이싱을 하는 방법은 기준점을 왼쪽으로 정렬하는 것입니다. 즉, 시퀀스의 첫 번째 항목의 인덱스는 0이며, 마지막 항목의 인덱스는 시퀀스의 길이-1 입니다. 이것은 또한 range 함수에서도 마찬가지입니다. 시작 값이 0인 경우, 이 시퀀스는 0부터 시작하여 end-1 까지의 값을 갖습니다.

두번째 이유는, 마지막 값을 포함하지 않은 것은 자주 사용하는 방식입니다. 사실, 이것은 매우 자주 사용됩니다. 이는 예를 들어, 겹치는 범위가 있을 때 발생합니다. 그렇다면, 두 개의 범위를 합칠 때, 각 범위의 마지막 값을 두 번 포함하게 됩니다. 따라서, 범위의 끝을 포함하지 않는 것은 이러한 오류를 방지하기 위한 것입니다.

마지막으로, range 함수는 메모리를 효율적으로 사용할 수 있도록 설계되었습니다. range 함수가 시퀀스에서 값을 생성할 때, 이 함수는 각 구성 요소를 필요에 따라 생성하는데, 이를 'lazy evaluation'이라고 합니다. 즉, 필요한 값을 요청할 때까지 값을 계산하지 않습니다. 이로 인해, 메모리의 사용이 줄어들어, 처리 속도가 향상됩니다.

이러한 이유로, range 함수는 일반적으로 끝 값을 포함하지 않습니다. 파이썬에서는 마지막 항목이 인덱스와 마찬가지로 시작 값과 끝 값에 포함되지 않는다는 원칙이 있습니다. 이 원칙을 따르면, range 함수에서도 끝 값을 포함하지 않으며 이는 매우 사용되는 방식입니다.

반응형
Comments