此问题已经在这里有了答案:
尽管我不想反转完整的字符串,但我正在python中反转字符串。我正在使用str[::-1]
反转字符串,但不包括最后一个字符。
例如:string = '0123456789'
反转为string = '987654321'
。
但是,当字符串长度为1时,反转会出现问题。
我只是使用string=string[len(string)-2::-1]
。对于长度大于1的字符串,它可以正常工作。但是,当字符串长度为1时,python会显示一些奇怪的结果。
w='0123456789'
>>> w[len(w)-2::-1]
=>'876543210' #PERFECT
>>> w[len(w)-2:0:-1]
=>'87654321' #PERFECT
>>> w[len(w)-2:-1:-1]
=>'' #WHAT? - (1)
>>> w[len(w)-2:-2:-1]
=>'' #WHAT? - (2)
>>> w[len(w)-2:-3:-1]
=>'8' #WHAT? - (3)
>>> w[len(w)-2:-4:-1]
=>'87' #WHAT? - (4)
#now see what happens when length of w is 1
>>> w='a'
>>> w[len(w)-2::-1]
=>'a' #WHAT - (5) as len(w)-2 is -1
>>> w[len(w)-2:0:-1]
=>'' #PERFECT
>>> w[len(w)-2:-1:-1]
=>'' #PERFECT as it's [-1:-1:-1]
>>> w[len(w)-2:-2:-1]
=>'a' #WHAT - (6)
>>> w[len(w)-2:-3:-1]
=>'a' #WHAT - (7)
>>> w[len(w)-2:-4:-1]
=>'a' #WHAT - (8)
[当w='0123456789'
时,为什么标记为WHAT - (1)
和WHAT - (2)
的行什么都没有显示,而标记为WHAT- (3)
和WHAT - (4)
的行却从8开始反方向?当我从-1索引开始时,当w='a'
标记为WHAT - (5)
的行为什么显示为'a'
时,标记为WHAT - (6)
,WHAT - (7)
和WHAT - (8)
的行发生了什么?
w ='0123456789'
索引可以读为“从哪里(包括)”:“到哪里(排除)”:“步长”。前两个部分中的负数表示+ len(...)
,因此类似w[len(w)-2:-1:-1]
的内容等效于w[-2:-1:-1]
或w[-2:len(w)-1:-1]
。
给出len(w) == 10
,w[len(w)-2:-1:-1]
表示w[8:9:-1]
。这显然是空的,因为您无法从8倒数到9。
[w[-2:-2:-1]
为空是出于相同的原因(例如,与w[2:2]
相同)。
w[len(w)-2:-3:-1]
是w[8:7:-1]
,按预期,它只是一个字符'8'
。 w[len(w)-2:-4:-1]
映射到w[8:6:-1]
的类似原因。
w ='a'
为了解释w[len(w)-2::-1]
,您还需要更多信息:空的开始或停止索引表示“在适当方向上的极限,包括步长的符号”。因此,缺少-1
步骤的停止索引意味着“过去了序列的开始”。另外,请注意,在这种情况下,len(w)-2
为-1
。因此,您有w[-1::-1]
,这意味着从最后一个元素向后开始,即'a'
。
w[len(w)-2:-2:-1]
很简单,如果您还跟踪索引:当长度为1时,w[-1:-2:-1]
几乎与1[-1::-1]
等效。
较大的负止损指数应该很简单。字符串的开头没有元素,因此结果始终只是'a'
。
如果起始索引为len(w)-3
左右,则会看到更多预期结果,因为在这种情况下len(w)
只会使问题感到困惑。