为什么somelist [len(somelist)]生成一个IndexError而不是somelist [len(somelist):]?

时间:2013-03-18 05:34:00

标签: python list slice colon

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

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

我甚至认为somelist[len(somelist):] = [1]等同于somelist.append(1)

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

3 个答案:

答案 0 :(得分:4)

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

  

si的{​​{1}}切片被定义为项目序列   索引jk。如果i <= k < ji大于j,请使用   len(s)。如果省略len(s)i,请使用None。如果省略0j,请使用   None如果len(s)大于或等于i,则切片为空。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

来自the Python docs

  

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

索引&gt;列表大小会自动更正,somelist[len(somelist):]会返回最后一个元素,即 nada