[英]Regarding Python's slice notation
這行代碼
print [0, 1, 2, 3, 4][0:1:1]
返回[0]
。
但是,以下代碼行:
print [0, 1, 2, 3, 4][0:0:1]
返回[]
。
為什么是這樣? 基於這個Explain Python的切片表示法 ,我的理解是格式應該是:
a[start:end:step] # start through not past end, by step
那么[0, 1, 2, 3, 4][0:0:1]
在第0個值開始和結束,因此返回[0]
?
切片的“結束”索引始終從結果中排除 ; 即, listy[start:end]
返回所有listy[i]
,其中start <= i < end
(注意使用<
而不是<=
)。 因為沒有數字i
使得0 <= i < 0
, listy[0:0:anything]
將始終是空列表(或錯誤)。
Python的切片表示法中的結束索引是獨占的。 切片[n:m]
將返回索引為> = n且<m的每個元素。
為了簡化一些事情,請在沒有步驟的情況下嘗試(當步長值為1時不需要):
>>> a = [0, 1, 2, 3, 4]
>>> a[0:1]
[0]
>>> a[0:0]
[]
作為一般規則,切片中的元素數等於切片的起始索引減去切片的結束索引。 即,切片[n:m]
將返回mn個元素。 這與[0:1]
返回的一個元素(1-0)和[0:0]
返回的零元素(0-0)一致。
(注意,如果任何一個切片索引超出了數組的大小,則不是這樣。)
有關切片索引如何工作的精確可視化,請在http://docs.python.org/2/tutorial/introduction.html上搜索“記住切片如何工作的一種方法”。
注意是[0:0:1]
而不是[0:1:1]
所以:
start = 0
end = 0
step = 1
切片[start:end:step]
意味着它將返回start
和end - 1
之間的值end - 1
具有特定step
,因此對於您的示例:
...[0:0:1]
介於0和-1之間的值,因此它不會返回任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.