下面的串列 x 只有 3 的長度,最大索引為 2,它不應該拋出索引錯誤而不是空串列嗎?
x = [1,2,3]
print(x[100:])
輸出是
[]
uj5u.com熱心網友回復:
與索引單個元素不同,允許使用切片索引越界。這對于切片很有用,例如x[1:5]您不需要知道x. 如果它走得太遠,它將在實際資料的末尾停止。
這是一個派上用場的示例,該函式將串列分解為最大大小的塊n:
def chunk(lst: list, n: int) -> list[list]:
result = []
for i in range(0, len(lst), n):
result.append(lst[i:i n])
return result
如果您嘗試使用不能被塊大小完全整除的輸入串列運行幾次,您將看到結果中的最后一個元素將比其余元素短,即使我們沒有在特殊情況下編碼對于最后一塊。
切片的寬容性質適用于切片的兩端。如您所見,如果切片的索引完全不在串列的末尾,您會得到一個空結果而不是錯誤。
uj5u.com熱心網友回復:
它不會拋出錯誤,因為您使用的是切片語法。由于您對越界序列進行切片,Python 回傳空串列的結果。我認為原因是串列的該范圍內沒有值x。
請參閱Sequence Types — list, tuple, range檔案中的注釋 4 :
從 i 到 j 的 s 切片被定義為索引為 k 的專案序列,使得 i <= k < j。如果 i 或 j 大于 len(s),則使用 len(s)。如果省略 i 或 None,則使用 0。如果省略 j 或 None,則使用 len(s)。如果 i 大于或等于 j,則切片為空。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390760.html
標籤:蟒蛇-3.x
