3

我是 Python 的新手,我想知道一些我觉得很好奇的东西。

假设我有这个:

s = "hello"

然后:

s[1:4]打印“ell”,这是有道理的......然后 s[3:-1] 打印 'l' 只有这也有意义..

但!

s[-1:3]这是相同的范围但向后返回一个空字符串 ''... 和 s[1:10] 或者s[1:-20]根本没有抛出错误......从我的角度来看,它应该产生一个错误,对吗?一个典型的越界错误.. :S

我的结论是范围总是从左到右,我想与社区确认这是否如我所说。

谢谢!

4

2 回答 2

3

s[-1:3]返回空字符串,因为该范围内没有任何内容。它正在请求从最后一个字符到第三个字符的范围,向右移动,但最后一个字符已经超过第三个字符。

默认情况下,范围是从左到右。

扩展切片可以反转步骤,或改变它的大小。所以s[-1:3:-1]只会给你'o'。该切片中的最后一个 -1 告诉您该切片应该从右向左移动。

如果您请求不在字符串中的范围,切片不会引发错误,它们只会为这些位置返回一个空字符串。

于 2013-09-24T15:26:55.507 回答
3

范围被“钳制”到字符串的范围......即

s[:10]

将返回前 10 个字符,如果字符串不够长,则返回更少。

负索引表示从末尾开始计数,因此s[-3:]取最后三个字符(如果字符串较短,则取更少)。

可以向后设置范围,但您需要使用明确的步骤,例如

s[10:5:-1]

你也可以简单地得到一个字符串的反转

s[::-1]

或通过将所有字符放在偶数位置组成的字符串

s[::2]
于 2013-09-24T15:30:43.300 回答