切片表示法 - 不包括最后一个字符的反向字符串

时间:2017-10-26 01:09:38

标签: python string slice

我希望反转一个字符串'str',并且如果给定的数字'n'是偶数,则只保留最后一个字符。我目前的方法:

str[::-1][n%2:]

我很好奇为什么以下内容不会产生相同的结果:

str[:-(n%2)-1:-1]

2 个答案:

答案 0 :(得分:1)

当您使用切片[start: end: step]时,您必须确保从startend方向符号 step,它的意思是:

  1. start< end如果步骤是肯定的。
  2. start> '端'如果步骤是否定的。
  3.   

    <强>注意:

         
        
    • -1表示列表中的最后一项。
    •   当没有指定时,
    • startend由python决定。
    •   
    • step是默认值1.
    •   

    STR [:: - 1]

    start等于-1,end等于0,str[::-1]生成保留列表。

    STR [:-( N%2): - 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;。但我觉得你不在乎。