我知道somelist[len(somelist)]
无法访问已定义列表之外的索引 - 这是有道理的。
但是为什么 Python 允许你这样做somelist[len(somelist):]
呢?
我什至读过这somelist[len(somelist):] = [1]
相当于somelist.append(1)
但是为什么切片符号会改变索引“len(somelist)”仍然在列表范围之外的事实呢?
这是文档中的一些内容。任何可迭代的切片都有特定的规则;特别值得注意的是#4,强调我的:
s
fromi
to的切片j
被定义为具有索引的项目序列,k
使得i <= k < j
。如果i
或j
大于len(s)
,请使用len(s)
。如果i
省略 orNone
,请使用0
. 如果j
省略 orNone
,请使用len(s)
. 如果i
大于或等于j
,则切片为空。
索引处没有任何内容len(somelist)
(列表索引在 python 中从 0 开始)。因此,尝试访问不存在的元素会引发错误。
但是,列表切片(使用myList[i:]
语法)返回一个新列表,其中包含包括 和 after 在内的元素i
。由于索引(或之后)的列表中没有元素,因此i
返回一个空列表
来自Python 文档:
退化的切片索引被优雅地处理:一个太大的索引被字符串大小替换,一个小于下限的上限返回一个空字符串。
因此 index > list size 会自动更正,并somelist[len(somelist):]
返回最后一个元素之后的元素,即nada。