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

Why does not the negative indices in python strings result as expected?

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

>>>word='HelpA'

>>>word

'HelpA' #expected string

>>>word[0:4]

'Help' #expected string

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

>>>word[-97:]

'HelpA'  #not the expected string

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

您似乎希望负指数为 'wrap'。 (97% len(单词)== 2)。

没有:)

这个例子告诉你原因:

>>> word[-1:]
'A'
>>> word[-3:]
'lpA'
>>> word[-5:]
'HelpA'
>>> word[-10:]
'HelpA'

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

The slice of s from i to j is defined as the sequence of items with index k such that 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)

输出:

>>> slice('foo', -100, 2)
'fo'
>>> 'foo'[-100:2]
'fo'

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

你要求的是最后 97 个字符。 没有那么多,但是 Python 很好玩,尽可能多地给你,这是最后 5 个字符(即全部)。