Python字符串切片步骤澄清

时间:2011-10-14 16:30:53

标签: python stride

所以我在切片时并没有真正得到stride参数的处理 例如,"123456"[::-2]生成"642",但为什么"123456"[1::-2]生成"2""123456"[2::-2]生成"31"

5 个答案:

答案 0 :(得分:24)

最简单的解释方法可能是解决您的例子:

"123456"[::-2]
# This takes the whole string ([::])
# Then it works backward (-)
# and it does every other character (2)

"123456"[1::-2]
# This is also working backward (-)
# every other character (2)
# but starting at position 1, which is the number 2.

"123456"[2::-2]
# Again, working backward (-)
# Every other character (2)
# begin at position 2, so you end up with positions 2, and 0, or '31'

切片语法为[<start>:<end>:step]。如果省略<start>且步骤为负,则从字符串末尾开始。

答案 1 :(得分:5)

请记住,指数从零开始。考虑到这一点,如果将字符串更改为'012345'

,可能会更清楚
In [1]: '012345'[1::-2]
Out[1]: '1'

In [2]: '012345'[2::-2]
Out[2]: '20'

In [3]: '012345'[5::-2]
Out[3]: '531'

正如您所看到的,切片确实从正确的索引开始,并且在每一步都采取正确的(负)步幅,直到到达字符串的开头。

答案 2 :(得分:4)

那是因为语法为string[start:end:step]

"123456"[::-2]

生成“642”,因为它将从最后一个字符开始。这是因为您没有提供切片将从哪个位置执行。因此它将从最后一个字符开始返回2个字符,直到它到达第一个字符。

"123456"[1::-2]

生成“2”,因为你告诉Python从第二个字符(字符串中的索引1)开始,你告诉Python从该位置返回两步。在这种情况下,Python显然会返回“2”。这是因为当Python试图返回2步时,它只用一步就击中了字符串中的第一个字符。

"123456"[2::-2]

你现在应该能够解决这个问题。但我还是会解释一下。所以,你告诉Python从第三个字符(或索引2)开始,然后从那里返回2步,直到它到达第一个字符。所以它将从“3”开始然后返回2步,并且意外地第一个角色 - 恰好是“1” - 已经到达。所以Python会给你“31”

答案 3 :(得分:0)

当你使用步幅时,它基本上有两个参数。 (指数开始步幅,步幅间隔)

"1234"[index::interval]

请记住stings从零开始索引,所以

"123456"[2::-2]

表示从索引2或“3”开始并在间隔内抓取每个。

"31"

答案 4 :(得分:0)

让我们了解python语法中的切片:

string[starting index : ending index : step]

和您的第一个示例:

123456[::-2]

[::],但不指定任何起始索引,它将使用整个字符串123456

[::-2],值-2表示每两步从字符串的结尾开始计数。

因此,您将得到642。