把字符串的后半部分写反了



我有一个或几个字符串。例如:

a = '12345678'
b = '123456789'

我使用Python 3.2。我想把弦的后半部分倒着写。如果字符串的字符数为奇数,则丢弃中间的字符。所以,我想要实现的是:

a_out = '8765'
b_out = '9876'

我的做法如下:

a_back = a[::-1]
a_out = a_back[0:len(a_back)//2]

问题是:是否有更短的方法来做到这一点?能一次手术而不是两次手术吗?

您可以同时计算索引和反转字符串:

>>> a[:-(len(a)+1)//2:-1]
'8765'
>>> b[:-(len(b)+1)//2:-1]
'9876'

使用方法

a = '12345678'
b = '123456789'
def method(x):  
    return x[:-(len(x)+1)//2:-1]
print method(a)
print method(b)
>>> 
8765
9876

你可以把它写成一行:

a_out = a[::-1][0:len(a)//2]

如果你能在字符串中做花哨的索引就好了,就像我们在numpy数组中做的那样,那么另一个解决方案是:

a_out = a[ range(len(a)-1, len(a)//2-1, -1) ] # NOT POSSIBLE

@jamylak建议使用'itemgetter'来以一种有效的方式完成类似于花哨索引的功能:

from operator import itemgetter
items = [0,3,2,1,0,0,2,3,]
a_out = ''.join( itemgetter( *items )(a) )
#14321134

最新更新