目的
把字符串逐字符或逐词反转过来,这个蛮有意思的。
方法
先看逐字符反转吧,第一种设置切片的步长为-1
revchars=astring[::-1]
In [ 65 ]: x = ' abcd ' In [ 66 ]: x[:: - 1 ]Out[ 66 ]: ' dcba '
第二种做法是采用reversed(),注意它返回的是一个迭代器,可以用于循环或传递给其它的“累加器”,不是一个已完成的字符串。
revchars=''.join(reversed(astring))
In [ 56 ]: y = reversed(x)In [ 57 ]: yOut[ 57 ]: < reversed object at 0x058302F0 > In [ 58 ]: '' .join(y)Out[ 58 ]: ' dcba '
接着来看逐词反转。
第一种做法,创建一个列表,将列表反转,用join方法合并
In [ 38 ]: s = ' Today is really a good day ' In [ 39 ]: rev = s.split()In [ 40 ]: revOut[ 40 ]: [ ' Today ' , ' is ' , ' really ' , ' a ' , ' good ' , ' day ' ]In [ 41 ]: rev.reverse()In [ 42 ]: revOut[ 42 ]: [ ' day ' , ' good ' , ' a ' , ' really ' , ' is ' , ' Today ' ]In [ 45 ]: ' ' .join(rev)Out[ 45 ]: ' day good a really is Today '
也有一行解决的代码:
rev = ' ' .join(s.split()[:: - 1 ])
第二种做法,可以不改变原先的空格,采用正则式来做:
In [ 46 ]: import reIn [ 47 ]: rev = re.split(r ' (\s+) ' ,s)In [ 48 ]: revOut[ 48 ]: [ ' Today ' , ' ' , ' is ' , ' ' , ' really ' , ' ' , ' a ' , ' ' , ' good ' , ' ' , ' day ' ]In [ 49 ]: rev.reverse()In [ 50 ]: revOut[ 50 ]: [ ' day ' , ' ' , ' good ' , ' ' , ' a ' , ' ' , ' really ' , ' ' , ' is ' , ' ' , ' Today ' ]In [ 51 ]: rev = '' .join(rev)In [ 52 ]: revOut[ 52 ]: ' day good a really is Today '
可以考虑采用reversed()来代替可读性较差的[::-1]
revwords = ' ' .join(reversed(s.split()))revwords = '' .join(reversed(re.split(r ' (\s+)' ,s )))