我有一个字符串或几个字符串。 例如:
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]
问题是:有更短的方法吗?它可以在一次操作中而不是两次操作中完成吗?
答案 0 :(得分:6)
您可以同时计算索引并反转字符串:
>>> a[:-(len(a)+1)//2:-1]
'8765'
>>> b[:-(len(b)+1)//2:-1]
'9876'
答案 1 :(得分:1)
你可以把它变成一个单行:
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
答案 2 :(得分:1)
使用方法:
a = '12345678'
b = '123456789'
def method(x):
return x[:-(len(x)+1)//2:-1]
print method(a)
print method(b)
>>>
8765
9876