2012-07-06 5 views
52

가능한 중복 : 나는 다음과 같은 코드 조각을 이해하기 위해 노력하고있어
Explain slice notation음수 목록 색인?

: 특히

# node list 
n = [] 
for i in xrange(1, numnodes + 1): 
    tmp = session.newobject(); 
    n.append(tmp) 
link(n[0], n[-1]) 

, 내가 이해하지 못하는 어떤 인덱스 -1 을 참고하여. 색인 0이 첫 번째 요소를 나타내는 경우 -1은 무엇을 의미합니까?

+2

이 질문은 [파이썬 조각 표기법에 대한 좋은 입문서]와 같은 마지막 부분을 다룹니다. (http://stackoverflow.com/questions/509211/good-primer-for-python-slice-notation) – Daenyth

+0

I 그것이 맞다고 생각합니다 .. 고마워요! – Dawood

답변

96

음수는 왼쪽이 아닌 오른쪽부터 계산되는 것을 의미합니다. 따라서 list[-1]은 마지막 요소를 말하며 list[-2]은 두 번째 마지막 요소입니다.

+7

그러나주의 할 점이 있습니다. 슬라이스 표기법을 사용하면 동작이 약간 다릅니다. 이 경우 -1을 사용하면 마지막 요소에서 하나의 요소를 반환합니다. >>> a = [1,2,3,4,5] >>> a [-1] >>> a [: - 1] [1, 2, 3, 4] – abought

+5

@ 그런데 정상적인 행동은 아닐까요? "a [4]"라고 말하면 5를 반환하지만'a [: 4]'는 [1,2,3,4] – yesennes

6

목록 색인 -x는 목록 끝에있는 x 번째 항목을 의미하므로 n[-1]은 목록의 마지막 항목을 의미합니다 . 어떤 좋은 파이썬 튜토리얼에서이 사실을 말해 줬어야합니다.

파이썬 이외의 다른 언어는 거의 사용되지 않았지만 매우 유용합니다. 다른 언어를 사용하는 경우 목록의 마지막 항목에 액세스하려면 많은 시간을 n[n.length-1]으로 작성해야합니다.

+1

을 반환합니다. 모든 언어가이 디자인을 따를 수는 없습니다. C에서'n [-1]'은 글자 그대로'n [0]'이전의 원소를 의미하며, n이 배열을 가리키면 괜찮습니다 - 더 일반적으로 버그 일지라도 말입니다. [http://dlang.org/d-array-article.html](Slicing in D)는 from-right 표기법을 포함하여 모국어로 메모리 안전 슬라이스를 처리하는 흥미로운 방법입니다. –

+0

파이썬은이 기능을 Perl에서 직접 가져 왔습니다 : https://stackoverflow.com/questions/15911115/arrays-and-negative-indexes-in-perl. 내 지식에 래리는 Perl을 위해 그 자신을 생각해 냈지만 그는 다른 곳에서 그것을 얻었을 수도있다. –