我的问题的一个具体例子是,“在这个例子中,我如何获得'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'这似乎很奇怪,我可以写foo4:0:-1,foo5:1:-1,等等,并得到我想要的,但没有办法写切片,所以我得到'3210‘。
一种临时的方法是foo0:4,但这会在进程中创建两个string对象。我将执行这个操作数十亿次,所以每个字符串操作都很昂贵。
我一定是错过了一些愚蠢而简单的东西。谢谢你的帮忙!
发布于 2011-04-27 08:52:43
只需排除结束范围索引...
>>> foo[3::-1]
'3210'讽刺的是,我认为你唯一没试过的选择。
发布于 2011-04-27 17:51:53
在切片表示法中省略结束索引:
>>> foo = '0123456'
>>> foo[3::-1]
'3210'如果必须多次执行此操作,请创建一个可以反复使用的切片对象
>>> i = slice(3,None,-1)
>>> foo[i]
'3210'发布于 2011-04-27 12:06:43
如果您正在寻找比扩展切片表示法更具可读性的东西:
>>> foo = '0123456'
>>> ''.join(reversed(foo[0:4]))
'3210'https://stackoverflow.com/questions/5798136
复制相似问题