我有点像python /编程新手,我刚刚玩过字符串切片。因此,string[::-1]
的简单字符串反向方法可以正常工作,但我的代码中还有其他实例会产生意外结果:
In [1]: string = "Howdy doody"
In [2]: string[::]
Out[2]: 'Howdy doody'
In [3]: string[::-1]
Out[3]: 'ydood ydwoH'
In [4]: string[0:]
Out[4]: 'Howdy doody'
In [5]: string[0::-1]
Out[5]: 'H' # what up with this?
In [6]: string[:len(string)]
Out[6]: 'Howdy doody'
In [7]: string[:len(string):-1]
Out[7]: '' # what up with this too?
In [8]: string[0:len(string)]
Out[8]: 'Howdy doody'
In [9]: string[0:len(string):-1]
Out[9]: '' # And what up here too.
我已经评论过上面的行,我希望字符串可以反转,但我很惊讶他们为什么不简单地反转字符串。有谁知道那是什么?
答案 0 :(得分:41)
切片表示法“[a:b:c]”表示“从c
开始以a
为增量计数,最多为b
独占”。如果c
为负数,则向后计数,如果省略,则为1.如果省略a
,则尽可能从您计算的方向开始(如果{{1是积极的,如果是负的则结束)。如果省略c
,那么你尽可能地朝着你想要的方向结束(如果b
为正,则为结束,如果为负则为结束)。如果c
或a
为负数,则它是距离结尾的偏移量(-1是最后一个字符)而不是开头。
好的,所以b
是一个字符,它表示“尽可能从索引0向后计数”。尽可能是字符串的开头。
string[0::-1]
或者就此而言string[0:len(string):-1]
略有不同。由于string[0:anything:-1]
为空的原因相同,它是空的。从一开始就无法到达切片的指定末端。您可以将此视为切片在“开始”之前结束(因此为空),或者您可以认为结束点被自动调整为等于起点(因此切片为空)。
string[1:0]
表示“从最后向后计数但不包括索引string[:len(string):-1]
”。无法达到该索引,因此切片为空。
您没有尝试len(string)
,但这意味着“从最后倒计时但不包括索引0”。所以除了第一个角色之外,所有这些都是相反的。 string[:0:-1]
为[:0:-1]
,[::-1]
为[0:len(string)-1]
。在这两种情况下,切片的排除末尾都是索引,该索引将包含切片的最后一个字符,并且末尾被省略。
您也没有尝试[:]
,这与string[-1::-1]
相同,因为string[::-1]
表示字符串的最后一个字符。
答案 1 :(得分:16)
在您无法正常工作的所有情况下,您开始 开始,然后向后移动 。没有比开头更进一步的倒退,所以你不能再获得任何角色。
这将是解决方案:
>>> string[len(string)::-1]
'ydood ydwoH'
切片表示法为start
,end
,step
。如果step
为负数,则start
应大于end
以获取任何内容。如果它留空([::-1]
),则会自动跟踪该细微差别
在你只有'H'
的情况下,可能会混淆为什么有任何。但想想写出来的解释:
从开始处的字符开始,按步骤递增,直到(但不包括)结束
现在很明显,因为你从0开始,所以包含0个字符