首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python反向步幅切片

Python反向步幅切片
EN

Stack Overflow用户
提问于 2011-04-27 08:50:57
回答 8查看 34.6K关注 0票数 35

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

代码语言:javascript
复制
>>> 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'

这似乎很奇怪,我可以写foo4:0:-1,foo5:1:-1,等等,并得到我想要的,但没有办法写切片,所以我得到'3210‘。

一种临时的方法是foo0:4,但这会在进程中创建两个string对象。我将执行这个操作数十亿次,所以每个字符串操作都很昂贵。

我一定是错过了一些愚蠢而简单的东西。谢谢你的帮忙!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-04-27 08:52:43

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

代码语言:javascript
复制
>>> foo[3::-1]
'3210'

讽刺的是,我认为你唯一没试过的选择。

票数 43
EN

Stack Overflow用户

发布于 2011-04-27 17:51:53

在切片表示法中省略结束索引:

代码语言:javascript
复制
>>> foo = '0123456'
>>> foo[3::-1]
'3210'

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

代码语言:javascript
复制
>>> i = slice(3,None,-1)
>>> foo[i]
'3210'
票数 9
EN

Stack Overflow用户

发布于 2011-04-27 12:06:43

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

代码语言:javascript
复制
>>> foo = '0123456'
>>> ''.join(reversed(foo[0:4]))
'3210'
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5798136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档