为什么s [len(s)-1:-1:-1]不起作用?

Vas*_*asu 5 python string string-length slice

在查看一些python字符串和函数时,我发现了这个奇怪的python怪癖:

s = "hello"
print s[::-1]
Run Code Online (Sandbox Code Playgroud)

然后打印: olleh

但是,print s[len(s)-1:-1:-1]不起作用.我的理解是它应该从最后一个元素迭代s[len(s)-1]到第一个元素s[0].但是,它只打印一个空字符串'',我相信这是因为在一些给定长度的字符串中(比如5)s[4] == s[-1],. 但是,我不明白为什么python决定使用-1而不是4实际的len(s).

此外,s[len(s):0:-1] + s[0]工作.为什么是len(s)有效的索引?python是否只是len(s)任意转换为0?

PS这是在Python 2.7.8中,我不确定它是否也适用于3.xx

编辑:确认在Python 3中是相同的

Aar*_*all 6

切片表示法是这样的:

s[start:stop:step]
Run Code Online (Sandbox Code Playgroud)

特别stop是,达到但不包括它.把它翻译成你要问的:

s[len(s)-1:-1:-1]
Run Code Online (Sandbox Code Playgroud)

这是基于5的长度 'hello'

s[4:-1:-1]
Run Code Online (Sandbox Code Playgroud)

要么

s[4:4:-1]
Run Code Online (Sandbox Code Playgroud)

这是一个空的或零长度的字符串.


我在这里对切片表示法进行了更深入的阐述:解释Python的切片表示法