Python字符串切片

Python字符串切片,python,stride,Python,Stride,因此,在切片中,我并没有真正理解步幅参数的含义。 例如,“123456”[:-2]产生“642”,但是为什么“123456”[1::-2]产生“2”和“123456”[2:-2]产生“31”?记住索引从零开始。记住这一点,如果将字符串更改为'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'

因此,在切片中,我并没有真正理解步幅参数的含义。

例如,
“123456”[:-2]
产生
“642”
,但是为什么
“123456”[1::-2]
产生
“2”
“123456”[2:-2]
产生
“31”

记住索引从零开始。记住这一点,如果将字符串更改为
'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'

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

最简单的解释方法可能是介绍您的示例:

"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'

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

使用stride时,它基本上有两个参数。(开始步幅的索引,步幅间隔)

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

"123456"[2::-2]
是指从索引2或“3”开始,在间隔内抓住每个索引

"31"

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

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

"123456"[1::-2]
生成“2”,因为您告诉Python从第2个字符(字符串的索引1)开始,并告诉Python从该位置返回2步。在本例中,Python显然只返回“2”。这是因为,当Python尝试返回2步时,它只需一步就可以命中字符串中的第一个字符

"123456"[2::-2]

你现在应该能弄明白这一点了。但我还是会解释的。因此,您告诉Python从第三个字符(或索引2)开始,然后返回两步,直到到达第一个字符。因此,它将从“3”开始,然后返回2步,意外地,第一个字符(碰巧是“1”)已经到达。因此,Python将为您提供“31”

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

string[starting index : ending index : step]
你的第一个例子是:

123456[::-2]
[::]
,在不指定任何起始索引的情况下,它将使用整个字符串123456

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


因此,您将得到642。

这是一个非常好的答案,是对OP的一个澄清。
[:-2]
将占用整个字符串,因为您没有分配
开始
,所以它将假定它是
0
非常类似于
范围(数字)
。此外,尝试使用索引来掌握它的诀窍,一旦使用了索引,它将是一个非常强大的功能。例如,这是一个很酷的单行回文检查器:
string==string[::-1]
。祝你好运对于“123456”[::-2]为什么它以6开头而不是1?我认为通过省略[:]中的变量,默认情况下它从一开始(即1)到结束,所以肯定应该是153…?@DanielMak-huh?它不是从索引0开始,然后再绕回来。你不可能得到153。是的,这就是我不明白的…我的意思是在正常情况下(如不倒退),不考虑开始和结束,我们从charecter zero开始。现在我们唯一改变的是指定它向后:我们仍然没有改变stsrt和finish参数,那么为什么它现在从6开始而不是1?对不起,我对编码界只有一周大,但我真的很感谢你的帮助@DanielMak-这就是指定语言的方式。如果省略开始,且步骤为负数,则输入列表(和结果)将反转。这里有更多的阅读资料:。关于这件事,没什么好说的了——只是它是如何工作的。
123456[::-2]