Python反向跨距切片

2024-05-11 09:43:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我问题的一个具体例子是,“在这个例子中,我如何得到'3210'


>>> foo = '0123456'
>>> foo[0:4]
'0123'
>>> foo[::-1]
'6543210'
>>> foo[4:0:-1] # I was shooting for '3210' but made a fencepost error, that's fine, but...
'4321'
>>> foo[3:-1:-1] # How can I get '3210'?
''
>>> foo[3:0:-1]
'321'

我能写出foo[4:0:-1]、foo[5:1:-1]等,并得到我所期望的结果,这似乎很奇怪,但没有办法写出切片,这样我就能得到“3210”。

这样做的一种临时方法是foo[0:4][::-1],但这会在进程中创建两个字符串对象。我将执行这个操作几十亿次,所以每个字符串操作都很昂贵。

我一定错过了一些愚蠢而容易的事情。谢谢你的帮助!


Tags: 字符串forgetthatfooerrorcan例子
3条回答

如果您正在寻找比扩展切片表示法更具可读性的内容:

>>> foo = '0123456'
>>> ''.join(reversed(foo[0:4]))
'3210'

只需排除结束范围索引。。。

>>> foo[3::-1]
'3210'

讽刺的是,关于唯一的选择我认为你没有尝试。

在切片符号中省略结束索引:

>>> foo = '0123456'
>>> foo[3::-1]
'3210'

如果必须多次执行此操作,请创建一个可反复使用的切片对象

>>> i = slice(3,None,-1)
>>> foo[i]
'3210'

相关问题 更多 >