Python字符串切片意外输出

时间:2015-02-19 15:25:18

标签: string slice

我目前面临一个奇怪的字符串切片问题。我无法理解下面代码的一部分。

s = 'azcbobobegghakl'

curString = s[0]
longest = s[0]

for i in range(1, len(s)):
    if s[i] >= curString[-1]:
        curString += s[i]
        if len(curString) > len(longest):
            longest = curString
    else:
        curString = s[i]
print 'Longest substring in alphabetical order is:', longest

特别是curString[-1]所在的部分。我试图确定该代码中curString[-1]的重点。

我做了这个测试:

>>> s = 'azcbobobegghakl'
>>> curString = s[0]

>>> curString
'a'

>>> curString[-1]
'a'

当使用相同的字符串定义一个新变量并尝试相同的[-1]切片时,它返回字符串的第一个字母,而我希望它返回最后一个(由于[-1]但是它确实不是。为什么?

2 个答案:

答案 0 :(得分:0)

此声明:

>>> s = 'azcbobobegghakl'
>>> curString = s[0]

会将"a"的值分配给curStrings[0]只是字符串s的第一个元素,它不是字符串s的范围或切片。

答案 1 :(得分:0)

问题是(我认为)你切错了列表

>>> s = 'azcbobobegghakl' 

>>> curString = s[0]

>>> print(curString)
a

这里 curString 等于 "a"

所以 curString[-1] = "a" 因为 curString 的最后一个字符是 "a"

如果你想要'azcbobobegghakl'的最后一个字符,请执行:

>>> curString = s[-1]     # This is "l"

>>> print(curString)
l