python - 反转长度为 1 的字符串有些奇怪

标签 python string slice reverse

<分区>

虽然我不想反转整个字符串,但我正在用 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) 的行显示 'a' 当我从 -1 索引开始并且标记为 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) == 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] 很简单:w[-1:-2:-1]当长度为 1 时, 几乎完全等同于 1[-1::-1]

较大的负止损指数应该是直截了当的。字符串开头之后没有元素,因此结果始终只是 'a'

如果您的起始索引是 len(w)-3 左右,您会看到更多预期结果,因为在这种情况下 len(w) 只会混淆问题。

关于python - 反转长度为 1 的字符串有些奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288120/

相关文章:

python - 将闪烁时间限制设置为 django message.success?

python - 如何使用aiocoap库观察CoAP资源?

javascript - 无法验证以下字符串是否为有效日期

php - 是否有转换这些字符的 php 函数?

javascript - 等效于 Python 的内容十六进制编码的 CryptoJS SHA512 哈希值?

python - 列表循环不打印结果

c++ - 在共享缓冲区内存中创建一个::std::string 对象

arrays - slice 在 GO 中是如何工作的?

numpy - 在 3D 数组的每个 2D 切片上的随机位置填充 block

go - 翻转 slice 时出现 for 循环逻辑错误