繁体   English   中英

为什么print(x [0:10:-1])与print(x [::-1])不同?

[英]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 换句话说,索引是ii+ki+2*ki+3*k等,直到达到j时停止(但不包括j

因此,当您在[0:10:-1]指定i = 0, j = 10, k = -1时,不存在满足方程0 <= n < (ji)/kn值,因此范围为空。

另一方面,在[::-1]i == j == None 请参阅注释5的下一部分:

如果省略ij或无,则它们将成为“结束”值(该结束取决于k的符号)。

由于k为负,因此i变为len(s) - 1 ,其值为9 j不能用任何数字表示(因为0会截断最后一个字符)。

您应该了解基本规则x[start:stop:step] 在代码中,您放置了两个不同的规则: print(x[0:10:-1])print(x[::-1])

当您在startstop索引中未放置任何内容时,将使用默认值(取决于步骤)来执行代码。 如果步长为正,则start索引将从0 startstop为字符串的长度。 在这里,你可以自定义startstop ,只要他们完成值start < stop 另一方面,如果step为负,则start索引将从字符串的最后一个索引开始,而stop则为0 在这里,你还可以自定义startstop ,只要价值,因为他们完成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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM