我有点像一个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.
我已经对上面的几行进行了评论,我希望字符串可以反转,但是我很惊讶地看到为什么它们不能简单地反转字符串。有人知道这是怎么回事吗?
在所有不起作用的情况下,都是从开始,然后向后移动。没有比开头更向后的了,所以你就没有更多的字符了。
这就是解决办法:
切片符号是
start
、end
、step
。当step
为负时,start
应该大于end
才能得到任何结果。如果留空([::-1]
),则会自动跟踪细微差别在您只得到
'H'
的情况下,可能会混淆为什么存在anything。但想想写下的解释:现在很明显,因为从0开始,0字符被包括在内
切片表示法“[a:b:c]”是指“从
a
开始以c
的增量计数,直至b
独占”。如果c
为负数,则倒数,如果省略,则为1。如果a
被省略,那么你就尽可能从你计数的方向开始(因此,如果c
是正的,那就是开始,如果是负的,那就是结束)。如果b
被省略,那么你就尽可能地朝着你正在计数的方向结束(所以如果c
是正的,则结束;如果是负的,则开始)。如果a
或b
为负数,则是与结束(最后一个字符是-1)的偏移量,而不是开始。好的,所以
string[0::-1]
是一个字符,它表示“尽可能从索引0向后计数”。尽可能的是字符串的开头。string[0:len(string):-1]
或就这一点而言,string[0:anything:-1]
是微妙不同的。它为空的原因与string[1:0]
为空的原因相同。无法从开始处到达切片的指定结尾。您可以将其视为在“开始”之前结束的切片(因此为空),也可以将结束点自动调整为等于开始点(因此切片为空)。string[:len(string):-1]
表示“从结尾向后计数,但不包括索引len(string)
”。无法访问该索引,因此切片为空。您没有尝试
string[:0:-1]
,但这意味着“从结尾向后计数,但不包括索引0”。所以这就是除了第一个角色以外的全部,颠倒过来。[:0:-1]
是[::-1]
,正如[0:len(string)-1]
是[:]
。在这两种情况下,切片的排除结尾都是索引,该索引本来是切片的包含的最后一个字符,但省略了结尾。您也没有尝试
string[-1::-1]
,这与string[::-1]
相同,因为-1
表示字符串的最后一个字符。相关问题 更多 >
编程相关推荐