如何使用显式 "slice of s from i to j with step k" 反转字符串?
How to reverse a string using explicit "slice of s from i to j with step k"?
我已经看到 ::-1
可用于反转字符串,但我认为找到可以完成这项工作的显式整数 i:j:k
会很有趣。
我找到了文档 common-sequence-operations,但无法使用它。此代码测试很短:
s = "abcd"
print(1,s[4:3:-1])
print(2,s[4:2:-1])
print(3,s[4:1:-1])
print(4,s[4:0:-1])
print(5,s[4:-1:-1])
这是输出:
1
2 d
3 dc
4 dcb
5
看起来你不能用明确的公式来做到这一点,s[i:j:k]
。
通常我可以通过试错来弄清楚简单的编程,但这在这里行不通。也许仔细阅读文档会让我克服这个问题!
你必须这样做:
s = "abcd"
print(s[len(s):-len(s)-1:-1])
或者,正如 Terry Jan Reedy 在评论中指出的,下面的写法很好地说明了切片的长度 (stop - start) / step
:
print(s[-1:-1-len(s):-1])
问题是负索引从后面开始,所以负索引对应以下"real"个索引:
-1 -> 3
-2 -> 2
-3 -> 1
-4 -> 0 # -len(s)
-5 -> -1 # that's the one you need (or any smaller number)
0
或 -len(s)
不够,因为切片的 stop
索引是独占的,所以你必须降低一个。
我已经看到 ::-1
可用于反转字符串,但我认为找到可以完成这项工作的显式整数 i:j:k
会很有趣。
我找到了文档 common-sequence-operations,但无法使用它。此代码测试很短:
s = "abcd"
print(1,s[4:3:-1])
print(2,s[4:2:-1])
print(3,s[4:1:-1])
print(4,s[4:0:-1])
print(5,s[4:-1:-1])
这是输出:
1
2 d
3 dc
4 dcb
5
看起来你不能用明确的公式来做到这一点,s[i:j:k]
。
通常我可以通过试错来弄清楚简单的编程,但这在这里行不通。也许仔细阅读文档会让我克服这个问题!
你必须这样做:
s = "abcd"
print(s[len(s):-len(s)-1:-1])
或者,正如 Terry Jan Reedy 在评论中指出的,下面的写法很好地说明了切片的长度 (stop - start) / step
:
print(s[-1:-1-len(s):-1])
问题是负索引从后面开始,所以负索引对应以下"real"个索引:
-1 -> 3
-2 -> 2
-3 -> 1
-4 -> 0 # -len(s)
-5 -> -1 # that's the one you need (or any smaller number)
0
或 -len(s)
不够,因为切片的 stop
索引是独占的,所以你必须降低一个。