【问题标题】:Reversing string of length 1 has some weirdness [duplicate]长度为1的反转字符串有些奇怪[重复]
【发布时间】:2020-02-05 20:17:00
【问题描述】:

虽然我不想反转完整的字符串,但我正在反转 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 开始反向?当w='a'为什么标记WHAT - (5)的行在我从-1索引开始时显示'a'以及标记WHAT - (6)WHAT - (7)WHAT - (8)的行发生了什么?

【问题讨论】:

  • 暂时忘记倒车。试试这个:'a'[-1:-1]。或者见鬼,甚至是'a'[0:0]

标签: python string slice reverse


【解决方案1】:

w = '0123456789'

索引可以读作“从哪里(含)”:“到哪里(不含)”:“步长”。前两节中的负数表示+ len(...),因此w[len(w)-2:-1:-1] 等价于w[-2:-1:-1]w[-2:len(w)-1:-1]

给定len(w) == 10w[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) 只会混淆问题。

【讨论】:

  • 我不明白这一行(如果我错了,请纠正我)>>>> 我在 IDE 中检查过,但两者都不是同样 - w[-2::-1] 给出一个空字符串,而 w[-1:-2:-1] 给出单个长度数组中存在的唯一字符。或者,如果您想说点别的,请澄清。感谢您的帮助!
  • @Pera。谢谢你的收获。修正了错字。
  • 哦!我现在明白了。谢谢! ?
  • @Pera。 “-1”表示最后一个元素,“-2”表示倒数第二个,等等。所以-1:-2:-1实际上表示从最后一个元素开始,然后越过字符串的开头(如果字符串只有一个元素) . -1::-1 意思相同。
  • @Pera。我知道您的问题已关闭,但您仍然可以选择此答案,假设它对您有意义。并恭喜获得投票特权。
猜你喜欢
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2021-06-29
  • 2019-11-20
  • 2016-02-14
  • 2012-10-23
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多