我正在玩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'
?
答案 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