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

时间:2019-05-16 02:31:46

标签: python

如果您在Python中定义一个字符串,例如:

x = "1234567890"

print(x[::-1])以相反的顺序打印字符串,但是 print(x[0:10:-1])什么也不打印。

他们为什么不打印相同的东西?

3 个答案:

答案 0 :(得分:3)

请参见relevant docs的注释5:

  

步骤 k 中从 i j s 切片被定义为具有索引x = i + n*k,使0 <= n < (j-i)/k。换句话说,索引是ii+ki+2*ki+3*k,依此类推,在达到 j 时停止(但从不包括 j

因此,当您在i = 0, j = 10, k = -1中指定[0:10:-1]时,不存在满足公式n的{​​{1}}值,因此该范围为空。

另一方面,在0 <= n < (j-i)/k中,[::-1]。请参阅注释5的下一部分:

  

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您正在寻找>>> 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 进行建模:

{{1}}