python 字符串反转

第一种方式:

def rev1 (s):
   return s[::-1]

 

对于s[i:j]这种形式的切片,就不说了……关键是……还可以为切片指定一个步进值,即s[i:j:stride],这样生成的元素就是s[i], s[i+stride], s[i+stride*2]等,直到j为止(j可不包括喔)。

然后,当然步进值也可以是负的……然后有一点要说的是……当i被省略的时候,如果stride>0则默认置为序列的开始,当stride<0时则被置为序列的结尾;

而j被省略时,如果stride>0则置为序列的结尾,否则置为序列的开始。

所以……s[::-1]就相当于s[结尾:开头:-1]……具体可以看《python参考手册 中文(第四版)》第44-45页。。

 

>>> s="abcdefg"
>>> s[::2]
'aceg'
>>> s[::-2]
'geca'
>>> s[5::-1]
'fedcba'
>>> s[5:0:-1]
'fedcb'
>>> s[:5:1]
'abcde'
>>> s[5::1]
'fg'

第二种:

def rev2 (s):
    a = list(s)
    a.reverse()
    return ''.join(a)

 

这个呢……就是把字符串转成list,然后把list反转,最后在通过join把list连接成字符串……

第三种:

def rev3 (s):
    str0 = ''
    l = len(s)-1
    while l >= 0:
        str0 += s[l]
        l -= 1
    return str0

 

这个就是C风格了吧?

第四种:

def rev4 (s):
    return reduce(lambda x, y : y + x, s)

 

reduce(func,seq[,init]):func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值:如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素。【此部分转载http://blog.csdn.net/prince2270/article/details/4681299

reduce的python实现:

 

>>> def reduce(bin_func,seq,initial=None):
	lseq = list(seq)
	if initial is None:
		res = lseq.pop(0)
	else:
		res = initial
	for eachItem in lseq:
		res = bin_func(res,eachItem)
	return res

 

转载请注明: 转载自http://jyd.me/

本文链接地址: python 字符串反转

Tagged on: ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注