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