为什么python字符串中的负索引没有按预期结果?

Vik*_*nti -1 python string indices

我在python中创建了一个字符串:'HelpA'并将其标记为单词.

>>>word='HelpA'

>>>word

'HelpA' #expected string

>>>word[0:4]

'Help' #expected string
Run Code Online (Sandbox Code Playgroud)

在使用负索引调用单词时,我得到的是完整字符串而不是预期的部分字符串.

>>>word[-97:]

'HelpA'  #not the expected string
Run Code Online (Sandbox Code Playgroud)

它给出了整个字符串而不是预期的字符串:'pA'为什么会发生这种情况?

And*_*zlo 6

看起来您期望负面指数"换行".(97%len(字)== 2).

它不:)

此示例显示了原因:

>>> word[-1:]
'A'
>>> word[-3:]
'lpA'
>>> word[-5:]
'HelpA'
>>> word[-10:]
'HelpA'
Run Code Online (Sandbox Code Playgroud)

当负索引超出字符串的长度时,它将被截断.Python文档的这一部分解释如下:

从i到j的s的片被定义为具有索引k的项的序列,使得i <= k <j

此代码执行等效切片(对于字符串):

def slice(s, i, j):
    sliced = []
    for k, item in enumerate(s):
        if i <= k and k < j:
            sliced.append(item)
    return ''.join(sliced)
Run Code Online (Sandbox Code Playgroud)

输出:

>>> slice('foo', -100, 2)
'fo'
>>> 'foo'[-100:2]
'fo'
Run Code Online (Sandbox Code Playgroud)

这应该清楚为什么word[-100:]word[-99:]给出相同的结果:字符串中的所有字符都有一个大于-100或-99的位置或索引,因为0是字符串的第一个位置