2012-07-06 32 views
52

thể trùng lặp:
Explain slice notationChỉ mục danh sách phủ định?

Tôi đang cố gắng để hiểu được đoạn mã sau:

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

Cụ thể, tôi không hiểu những gì chỉ số -1 đề cập đến. Nếu chỉ mục 0 là yếu tố đầu tiên thì -1 là gì?

+2

Tôi nghĩ câu hỏi này bao gồm cùng một nền tảng cuối cùng là [Tốt Primer cho Python Slice Notation] (http://stackoverflow.com/questions/509211/good-primer-for-python-slice-notation) – Daenyth

+0

I nghĩ rằng đó là đúng .. cảm ơn! – Dawood

Trả lời

96

Số âm có nghĩa là bạn đếm từ bên phải thay vì bên trái. Vì vậy, list[-1] là yếu tố cuối cùng, list[-2] là phần tử thứ hai, v.v.

+7

Tuy nhiên, có một cảnh báo: hành vi hơi khác nếu bạn thử ký hiệu slice. Nếu bạn sử dụng -1 trong trường hợp đó, nó trả về một phần tử từ phần tử cuối cùng. >>> a = [1,2,3,4,5] >>> a [-1] >>> a [: - 1] [1, 2, 3, 4] – abought

+5

@ abought Đó không phải là hành vi bình thường? Nếu tôi nói 'a [4]', nó sẽ trả về 5, nhưng 'a [: 4]' trả về [1,2,3,4] – yesennes

6

Danh sách chỉ mục của -x có nghĩa là mục thứ x từ cuối danh sách, vì vậy n[-1] có nghĩa là mục cuối cùng trong danh sách n. Bất kỳ hướng dẫn Python tốt nào cũng nên nói với bạn điều này.

Một quy ước khác thường là ít ngôn ngữ khác với Python đã áp dụng, nhưng nó cực kỳ hữu ích; bằng bất kỳ ngôn ngữ nào khác, bạn sẽ dành rất nhiều thời gian để viết n[n.length-1] để truy cập mục cuối cùng của danh sách.

+1

Đúng mặc dù không phải tất cả ngôn ngữ đều có thể theo thiết kế này. Trong C, 'n [-1]' nghĩa đen là phần tử trước 'n [0]' và là tốt nếu n trỏ vào một mảng - ngay cả khi nó thường là một lỗi. [http://dlang.org/d-array-article.html](Điều chỉnh trong D) là một điều thú vị khi cắt an toàn bộ nhớ bằng ngôn ngữ bản địa bao gồm ký hiệu từ phải. –

+0

Python có tính năng này trực tiếp từ Perl: https://stackoverflow.com/questions/15911115/arrays-and-negative-indexes-in-perl. Theo hiểu biết của tôi, Larry tự mình tìm ra Perl, nhưng anh ta có thể đã lấy nó từ nơi khác. –

Các vấn đề liên quan