使用范围和负步骤时python中字符串切片的问题

时间:2014-10-17 05:50:22

标签: python

我正在玩python字符串拼接并遇到了我不理解的python行为。假设你有一个字符串,它有三种不同的拼接方式:

str = "stackoverflow"

splicedStr = str[2:6]
#this spliced string would equal 'ackove'

splicedStr = str[2:8:2]
#this spliced string would equal 'akv'

splicedStr = str[2:8:-2]
#this spliced string would equal ''

我理解前两个拼接。但是对于最后一个示例,如果您有一个负步数,为什么它不等于'vka'

2 个答案:

答案 0 :(得分:1)

您正在寻找的切片是:

>>> s[-7:1:-2]
'vka'

也是:

>>> s[6:1:-2]
'vka'

请注意,您始终从提供的第一个索引开始,直到您点击(或大于)提供的第二个索引。第三个指标就是步伐。

在你的情况下,你从8开始(已经大于2)所以你最终得到一个空字符串。

我认为你预计,在消极的情况下,第一个指数将是字符串右侧的位置。事实并非如此 - 负数指数从字符串的左侧算起。

像往常一样,the official language reference比我更正式地(和正确地)陈述它。

  

具有步骤k的从i到j的s的片被定义为具有索引x = i + n * k的项的序列,使得0 <= n <1。 (J-I)/ K。换句话说,索引是i,i + k,i + 2 * k,i + 3 * k等等,当到达j时停止(但是从不包括j)。如果i或j大于len(s),则使用len(s)。如果i或j被省略或无,则它们变为“结束”值(其结束取决于k的符号)。注意,k不能为零。如果k为None,则将其视为1。

答案 1 :(得分:0)

如果您正在阅读后面的项目,那么如何在项目之前访问以后的项目。

这样做:

str = "stackoverflow"
splicedStr = str[8:2:-2]

你到底在做什么: -     splicedStr = str [2:8:-2]

's', 't', 'a', 'c', 'k', 'o', 'v', 'e', 'r', 'f', 'l', 'o', 'w'
           !                             !!      
           # strat here                  # upto here

       # but stepsize is -2 so how it can proceed to Offlimit