2012-06-27 4 views
5

나는 10 개 요소 목록이있는 경우 :왜 파이썬은 음수리스트 인덱스를 반환합니까?

>>> l = [1,2,3,4,5,6,7,8,9,0] 

왜 리터 [10] 반환 것이다 IndexError,하지만 난 [-1] 0을 반환을?

>>> l[10] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 
>>> l[0] 
1 
>>> l[-1] 
0 
>>> l[-2] 
9 

내가 원하는 것은 목록에 이전 요소가 없으면 오류를 던집니다.

+0

"목록의 이전 요소 없음"은 무엇을 의미합니까? '이전'으로 '현재 요소의 왼쪽'을 의미하는 경우 Lattyware의 답변이 잘 처리되어야합니다. 그러나 나는 당신이 다른 것을 의미하는지 궁금해 할 수 없습니다. –

답변

19

파이썬에서 음수 목록 색인은 목록 오른쪽에서 계산 한 항목을 나타냅니다 (즉, l[-n]l[len(l)-n]의 약식 임). 당신이 찾아내는 경우에

당신은 당신이 단순히 (가 또는 다음을 처리하고) 그 경우 확인하고 예외 자신을 올릴 수, 오류를 표시하는 부정적인 지표가 필요

index = get_some_index() 
if index < 0: 
    raise IndexError("negative list indices are considered out of range") 
do_something(l[index]) 
+0

IndexError가 마음에 들지는 않지만 적어도 이제는 메시지가 있습니다. 만약 내가 * 알고 * 그것을 내장 목록에있어 마지막 요소를 얻을 수 없다면 나는 아주 놀랄 것입니다 ... 더하기 슬라이싱은 그것에 몇 가지 작업이 필요합니다 ... –

+0

@JonClements 나는 하위 클래스를 제안하지 않을거야. 따라서 목록은 다르게 동작하지 않을 것입니다. 음수 인덱스가 필요하지 않은 특정 인스턴스에서 처리해야합니다. 처리해야합니다. –

2

그건 l[-1]가 동일하기 때문에 l[len(l)-1]에, 유사 l[-2]l[len(l)-2]

>>> lis=[1,2,3,4,5] 
>>> lis[-1],lis[-2],lis[-3] 
(5, 4, 3) 
>>> lis[len(lis)-1],lis[len(lis)-2],lis[len(lis)-3] 
(5, 4, 3) 
1

Q과 같다 : 왜 l[10]를 반환합니다 n IndexError이지만 l[-1]0을 반환합니까?

: 파이썬의 색인 값은 다른 많은 언어와 마찬가지로 0부터 시작합니다. 즉, 첫 번째 항목은 인덱스 0에 저장됩니다.

l = [1,2,3,4,5,6,7,8,9,0] 

귀하의 목록에있는 10 개 항목이 있습니다. 색인은 0에서 시작하므로 마지막 항목의 색인은 9입니다. 인덱스 10에서 목록에 액세스하려고하면 Python은 IndexError 예외를 던져 올바르지 않은 인덱스 값이며 범위를 벗어 났음을 알립니다.

파이썬은 음수 인덱스 값 규칙을 사용하여 목록이나 시퀀스의 "끝"항목에 액세스합니다. 색인 값 -1은 목록에서 마지막으로 항목을 나타내며 -2 다음 항목을 나타냅니다. 목록의 마지막 항목은 0이므로이 항목은 l[-1]입니다.

@ Lattyware의 답변은 이미 예외 생성/예외 발생 방법을 보여 주므로 초기 질문에 대한 답변이되기를 바랍니다.

관련 문제