2

我有一个特定的字符串,或几个字符串。例如:

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]

问题是:有没有更短的方法来做到这一点?可以一次操作而不是两次操作吗?

4

3 回答 3

6

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

>>> a[:-(len(a)+1)//2:-1]
'8765'
>>> b[:-(len(b)+1)//2:-1]
'9876'
于 2013-05-26T08:08:49.873 回答
1

使用方法:

a = '12345678'
b = '123456789'

def method(x):  
    return x[:-(len(x)+1)//2:-1]

print method(a)
print method(b)

>>> 
8765
9876
于 2013-05-26T08:10:54.550 回答
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
于 2013-05-26T07:57:48.280 回答