Python 将字符串的后半部分向后写入

Python 将字符串的后半部分向后写入,python,python-3.x,Python,Python 3.x,我有一根或几根弦。 例如: 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 = '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_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

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

>>> 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

len(x)//2
,因为OP使用的是Python 3。这个问题的
numpy
解决方案可以用与@NolenRoyaltyThank you完全相同的方法来解决,对于我来说,很高兴知道指数可以用这种方法计算。但是像[0,3,2,1,5]这样的奇特索引也不一定要在一个速度较慢的范围内,而且您可以在纯python中通过操作符import itemgetter
itemgetter(*索引列表)(a)
来实现这一点,这也是很好的了解!非常感谢。你不介意我用这个选项更新答案吗?。。。你用绳子试过这个吗?