簡體   English   中英

為什么python列表切片允許引用不存在的條目?

[英]Why does python list slicing allow for referencing entries that aren't there?

考慮以下代碼:

>>> arr = np.array(['A', 'B', 'C'])
>>> arr[0:20]
array(['A', 'B', 'C'], 
      dtype='|S1')

為什么我允許將數組切成3呢? 我預計這會引發錯誤,因為沒有20個條目可供參考。

這也適用於常規列表切片,字符串切片,元組切片以及大多數可切片對象。 這只是Python約定,允許超出范圍的切片並將超出范圍的切片端點調整為序列的最近端點。

這取自文檔

給定一個像s[i:j:k]這樣s[i:j:k]切片表達式,

將步驟i中從i到j的s切片定義為索引為x = i + n * k的項目序列,使得0 <= n <(ji)/ k。 換句話說,索引為i,i + k,i + 2 * k,i + 3 * k等,當達到j時停止(但不包括j)。 當k為正時,如果i和j較大,則將它們減小為len

numpy數組也是如此。 給定一個切片表達式,例如x[0:20] ,它將被簡化為x[0:len(x)]返回數組中的所有內容。

Python通過返回盡可能多的元素來優雅地處理對元素的無限制訪問,而不會引發錯誤。 這是語言開發人員做出的設計決定。 您可能會或可能不希望出現此錯誤,因此在切片列表時要格外小心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM