Python中的索引和切片

3

我刚刚开始学习编程,需要一些澄清。

关于

s = "abcdef"
print(s[0:2:-1])

输出为空字符串。我不太理解的是为什么print(s[:2:-1]) 的输出是fed,而print(s[0:2:-1])没有输出。

另外:为什么扩展切片不能反转列表? - Georgy
同时:Python切片的奇怪行为 - Georgy
5个回答

5
print(s[:2:-1]) 不等同于 print(s[0:2:-1]) - 它等同于 print(s[None:2:-1])。当省略切片参数或使用 None 时,会自动填充缺失的端点。如果步长为负数,则起始位置为序列的末尾,结束位置为序列的开头。print(s[0:2:-1]) 遍历从 s[0]s[2] 的区间,但它不可能成功,因为 2 > 0 而且无法从 0 向 2 倒数。print(s[:2:-1]) 遍历从字符串的最后一个字符 s[-1]s[2]

3

如果将第三个参数设置为负数,则可逆遍历可迭代对象的元素。如果让第一个参数为空,则意味着迭代应该从最右边的元素开始。请思考 s[::-1] == 'fedcba' 这个事实。


1
我将解释索引中那三个数字的含义!
s = "abcdef"

在这个字符串中,如果你从左边开始计数,索引值从0开始,如果你从右边开始计数,索引值从-1开始。也就是说,如果你从左边开始计数,a的索引值为0f的索引值为5;如果你从右边开始计数,f的索引值为-1a的索引值为-6

因此,

>>> s[0:-1]
'abcde'

如果您想要具有恒定间隔的索引,则可以在起始和结束后再引入一个数字,如下所示。
>>> s[0:5:2]
'ace'

这意味着,您从开头到每个第二个索引进行阅读。此外,在编写时,请保留


>>> s[::-1]
'fedcba'

你正在引用每个-1索引,这基本上意味着,是的!你猜对了 :) ,颠倒顺序!我认为这个答案以及该线程中的其他答案应该能给你一个很好的想法!敬礼。

1
字符串切片的语法很简单:

x[start:end:step]

其中切片从start开始,到end之前结束,每次迭代按step进行。

s[0:2:-1]

返回[],因为你不能从索引0到2向后切片。这毫无意义!s[2:0:-1](返回'cb')会更有意义。

s[:2:-1]

返回'fed'。省略startstep为-1意味着从序列末尾开始到索引2的反向切片(因为step为-1)。


0

例如替换0和2

打印(s [2:0:-1])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接