我有一个或几个字符串。例如:
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