Python范围切片和索引行为

时间:2014-01-31 13:45:00

标签: python slice

在Python中,我想知道为什么切片按照他们的方式工作。为什么Guido van Rossum定义a[start:end]以包含a[start] a[end],或者如标题所示,为什么a[0:1]仅包含第一个a[0:0]元素而不是前两个?

这似乎是MATLAB索引行为的一个退步。

编辑:我问这个问题的原因是{{1}}为空是令人困惑的。但我没有设计一种流行语言,所以我知道什么。

3 个答案:

答案 0 :(得分:5)

quote Guido van Rossum本人:

  

[...]我被半开的间隔的优雅所左右。特别是   不变的,当两个切片相邻时,第一个切片的结束   index是第二个切片的起始索引太漂亮了   忽视。例如,假设您将字符串拆分为三个部分   索引i和j - 部分将是[:i],a [i:j]和a [j:]。

答案 1 :(得分:0)

a[start:end-1]允许您使用a[0:len(a)]

它适用于所有其他功能,例如range()和其他功能。

答案 2 :(得分:0)

Python索引是基于0的。通过排除结束值,大多数切片和range()操作可以自然地反映切片或生成的项目的数量,同时仍包括索引0。

因此,range(10)产生10个元素,从0到9.切片到sequence[:1]产生1个元素,索引0。

此外,不包括结束索引使得更容易使用相同值作为下一部分的开头。因此sequence[:i] + sequence[i:]从两个切片重新创建sequence,而无需调整i