[英]Why isn't `print(x[0:10:-1])` the same as `print(x[::-1])`?
如果您在Python中定义一个字符串,例如:
x = "1234567890"
print(x[::-1])
以相反的顺序打印字符串,但print(x[0:10:-1])
打印任何内容。
他们为什么不打印相同的东西?
请参阅相关文档的注释5:
S的从i到与步骤k j中的切片被定义为与索引项的序列
x = i + n*k
,使得0 <= n < (ji)/k
。 换句话说,索引是i
,i+k
,i+2*k
,i+3*k
等,直到达到j时停止(但不包括j )
因此,当您在[0:10:-1]
指定i = 0, j = 10, k = -1
时,不存在满足方程0 <= n < (ji)/k
的n
值,因此范围为空。
另一方面,在[::-1]
, i == j == None
。 请参阅注释5的下一部分:
如果省略i或j或无,则它们将成为“结束”值(该结束取决于k的符号)。
由于k
为负,因此i
变为len(s) - 1
,其值为9
。 j
不能用任何数字表示(因为0
会截断最后一个字符)。
您应该了解基本规则x[start:stop:step]
。 在代码中,您放置了两个不同的规则: print(x[0:10:-1])
和print(x[::-1])
。
当您在start
和stop
索引中未放置任何内容时,将使用默认值(取决于步骤)来执行代码。 如果步长为正,则start
索引将从0
start
, stop
为字符串的长度。 在这里,你可以自定义start
和stop
,只要他们完成值start < stop
。 另一方面,如果step为负,则start
索引将从字符串的最后一个索引开始,而stop
则为0
。 在这里,你还可以自定义start
和stop
,只要价值,因为他们完成start > stop
。
在您的情况下,您编写了print(x[0:10:-1])
,但没有任何回报。 显然,这是因为在步骤为负数时将0
设置为起始索引,将10
为终止索引。
参考: https : //www.digitalocean.com/community/tutorials/how-to-index-and-slice-strings-in-python-3
您正在寻找print(x[10:0:-1])
。
>>> x = list(range(10))
>>> x[10:0:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
我们可以使用以下伪代码对x[start:end:step]
进行建模:
i = start
if start < end:
cond = lambda: i < end
else:
cond = lambda: i > start
while cond():
SELECT x[i]
i += step
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.