我希望反转一个字符串'str',并且如果给定的数字'n'是偶数,则只保留最后一个字符。我目前的方法:
str[::-1][n%2:]
我很好奇为什么以下内容不会产生相同的结果:
str[:-(n%2)-1:-1]
答案 0 :(得分:1)
当您使用切片[start: end: step]
时,您必须确保从start
到end
的方向与符号 step
,它的意思是:
start
< end
如果步骤是肯定的。start
&gt; &#39;端&#39;如果步骤是否定的。<强>注意:强>
- -1表示列表中的最后一项。
当没有指定时,start
和end
由python决定。step
是默认值1.
start
等于-1,end
等于0,str[::-1]
生成保留列表。
start
等于-1,end
等于-0(n为偶数)或-1(n为奇数)。
end
等于-0,然后str[:-(n%2):-1]
生成一个保留列表。end
等于-1,然后str[:-(n%2):-1]
生成一个空列表。答案 1 :(得分:0)
因为在str[:-(n%2)-1:-1]
中(格式为str [x:y:z])x和y是起始和结束索引,z是步幅或要跳过多少个字符。通过使z -1,字符串反转; x必须大于y,以便提取的字符串不是空子字符串。如果您没有为x提供任何值,则默认为-1。所以实际上你的切片相当于str[-1:-1:-1]
,所以给出一个空字符串。
对切片进行一点改动可能会产生您想要的结果:
n=2
str[n%2-1:-len(str)-1:-1]
'nohtyp'
当然如果n是奇数,那么这只会给出&#39; p&#39;。但我觉得你不在乎。