8

我知道somelist[len(somelist)]无法访问已定义列表之外的索引 - 这是有道理的。

但是为什么 Python 允许你这样做somelist[len(somelist):]呢?

我什至读过这somelist[len(somelist):] = [1]相当于somelist.append(1)

但是为什么切片符号会改变索引“len(somelist)”仍然在列表范围之外的事实呢?

4

3 回答 3

4

这是文档中的一些内容。任何可迭代的切片都有特定的规则;特别值得注意的是#4,强调我的:

sfrom ito的切片j被定义为具有索引的项目序列,k使得i <= k < j。如果ij大于len(s),请使用 len(s)。如果i省略 or None,请使用0. 如果j省略 or None,请使用 len(s). 如果i大于或等于j,则切片为空。

于 2013-03-18T05:42:25.200 回答
1

索引处没有任何内容len(somelist)(列表索引在 python 中从 0 开始)。因此,尝试访问不存在的元素会引发错误。

但是,列表切片(使用myList[i:]语法)返回一个新列表,其中包含包括 和 after 在内的元素i。由于索引(或之后)的列表中没有元素,因此i返回一个空列表

于 2013-03-18T05:37:33.980 回答
1

来自Python 文档

退化的切片索引被优雅地处理:一个太大的索引被字符串大小替换,一个小于下限的上限返回一个空字符串。

因此 index > list size 会自动更正,并somelist[len(somelist):]返回最后一个元素之后的元素,即nada

于 2013-03-18T05:40:54.983 回答