长度为1的反向字符串有些怪异[重复]

问题描述 投票:3回答:1

此问题已经在这里有了答案:

尽管我不想反转完整的字符串,但我正在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)的行发生了什么?

python string slice reverse
1个回答
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)只会使问题感到困惑。

© www.soinside.com 2019 - 2024. All rights reserved.