【发布时间】:2017-08-14 20:48:19
【问题描述】:
我查看了 why-does-list-1-not-equal-listlenlist-1 和 what-are-the-default-slice-indices-in-python-really 上的热门答案,以了解切片中的默认值设置。两个最佳答案均参考以下文档:
给定s[i:j:k],
如果 i 或 j 被省略或没有,它们将成为“结束”值(结束取决于 k 的符号)。注意,k 不能为零。如果 k 为 None,则将其视为 1。
假设我有以下代码:
s = "hello"
forward_s = s[::1]
print(forward_s) # => "hello"
backward_s = s[::-1]
print(backward_s) # => "olleh"
我知道如果省略了索引,那么 Python 会将其视为在这些地方使用了 None 的值。根据文档,[i:j:k] 中的i 和j 的索引根据k 的符号设置为“结束”值。对于肯定的k,我假设i 设置为0,j 设置为字符串的长度。但是,为负 k 设置的值是什么?
例如,以下也反转字符串:
reversed_str = s[-1:-6:-1]
所以当k = -1 时,i 的默认值可能设置为-1 和j 设置为-len(s) - 1?
【问题讨论】:
-
这似乎是正确的分析。否则它会尝试从 0 到 -1 到 -2...所以
[::-1]不会正确地反转列表,而是会给出第一个元素,然后将其余元素反转。 -
什么是“最终价值”?
-
当 k 为负数时,i 和 j 被视为从字符串的终止端开始的结束值。您链接的答案中引用的文档对此很明确。
-
好吧,如果
len(str) - 1和0是“最终值”,那么为什么这不起作用:"hello"[len("hello") - 1: 0: -1]?这将返回“olle”而不是“olleh”。 -
这就是我想澄清的。
-1和-len(s) - 1是否是另一组结束值,特别是对于负值 k。
标签: python python-3.x