繁体   English   中英

为什么我的字符串反转 my_str[len(my_str)-1:-1:-1] 不产生 output?

[英]Why doesn't my string reversal my_str[len(my_str)-1:-1:-1] produce output?

TL;DR:为什么my_str[6:-1:-1]不起作用而my_str[6::-1] ] 起作用?

我有一个字符串:

my_str="abcdefg"

我必须反转部分字符串,我通常会这样做

my_str[highest_included_index:lowest_included_index-1:-1]

例如,

# returns the reverse of all values between indices 2 and 6 (inclusive)
my_str[6:2-1:-1]
'gfedc'

如果我想在我的反转中包含 0 索引,则此模式会失效:

my_str[6:0-1:-1]  # does NOT work
''
my_str[6:-1:-1]   # also does NOT work
''
my_str[6::-1]     # works as expected
'gfedcba'

我是否必须添加一个边缘案例来检查我想要包含在反转字符串中的最低索引是否为零并且不包含在我的反转中? 即,我必须做

for low in range(0,5):
    if low == 0:
        my_str[6::-1]
    else:
        my_str[6:low-1:-1]

这似乎......笨拙,而不是我对 python 的期望。

编辑:

我能找到的最接近文档的地方是:

s[i:j:k]
...
步骤 k 从 i 到 j 的 s 切片定义为具有索引x = i + n*k的项目序列,使得0 <= n < (ji)/k 换句话说,索引是ii+ki+2*ki+3*k等等,当达到 j 时停止(但从不包括 j)。 当 k 为正时,如果 i 和 j 更大,则将其缩减为len(s) 当 k 为负时,如果 i 和 j 更大,则将它们减少为len(s) - 1 如果 i 或 j 被省略或None ,它们将成为“结束”值(结束取决于 k 的符号)。 注意,k 不能为零。 如果 k 为None ,则将其视为 1。

然而,这并没有提到负 j 被最大化为零,这似乎是当前的行为。

my_str[6:0-1:-1]  # does NOT work
''
my_str[6:-1:-1]   # also does NOT work
''

是的,它们确实有效——如文件所述。 负索引是序列 position,从右数。 这些表达式等价于

my_str[6:-1:-1]

由于6-1表示相同的 position,因此结果为空字符串。 但是,如果您给出一个等于或超过字符串开头的值,例如

my_str[6:-10:-1]

然后您会看到预期的反转,就像您指定了6::-1

是的,您必须为索引的不连续性做一个特殊情况。

#something like this?
x='my test string'
print(x[3:7][::-1])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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