在Python可以使用陣列切片表示法以獲得值的子集在一個可迭代:Python:爲什麼[0,1,2] [ - 1:1]不會引發錯誤?
a = [0,1,2]
a[0:2]
# returns all members from the 0th to the 2nd: [0,1]
如果試圖提取的切片,其中第一值是負的,而第二值是正的,然而,該請求返回一個空列表:
a[-1:2]
# returns []
這是違反直覺的我的,作爲該範圍由限定-1:2似乎是一個超集由0所限定的範圍的:2。我知道一個人可以使用負面索引從Python切片符號數組的末尾採摘(例如:a[-1]
是2),但它在第一個切片位置看起來像是負值,第二個切片位置應該是負值或者引發一個錯誤,或者返回由第一個位置上的0返回的相同片段的值的超集。
我很想知道切片請求返回的空列表背後的動機,第一個位置爲負值,第二個位置爲正值,如果有人碰巧在這個前面有洞察力...
'a [-1:2]'讀作'a [len(a)-1:2]' – Kos
我聽到了。但是,如果第一個位置的負值所在的切片所返回的值始終爲空,爲什麼語言不會產生錯誤?在切片函數的第一個位置似乎沒有一個負值的合理用例,因此,如果出現這種情況,似乎應該警告開發人員...... – duhaime
@Kos我認爲它更準確地說, 'a [-1:2]'讀作'a [-1%len(a):2]',因爲你可以在那裏放一個-7沒有問題 – Nullman