简单谈谈Python中的反转字符串问题


Posted in Python onOctober 24, 2016

按单词反转字符串是一道很常见的面试题。在Python中实现起来非常简单。

def reverse_string_by_word(s):
 lst = s.split() # split by blank space by default
 return ' '.join(lst[::-1])

s = 'Power of Love'
print reverse_string_by_word(s)
# Love of Power

s = 'Hello World!'
print reverse_string_by_word(s)
# World! Hello

上面的实现其实已经能满足大多数情况,但是并不完美。比如第二个字符串中的感叹号并没有被翻转,而且原字符串中的空格数量也没有保留。(在上面的例子里其实Hello和World之间不止一个空格)

我们期望的结果应该是这样子的。

print reverse_string_by_word(s)
# Expected: !World Hello

要改进上面的方案还不把问题复杂化,推荐使用re模块。你可以查阅re.split() 的官方文档。我们看一下具体例子。

>>> import re
>>> s = 'Hello World!'

>>> re.split(r'\s+', s) # will discard blank spaces
['Hello', 'World!']

>>> re.split(r'(\s+)', s) # will keep spaces as a group
['Hello', ' ', 'World!']

>>> s = '< Welcome to EF.COM! >'

>>> re.split(r'\s+', s) # split by spaces
['<', 'Welcome', 'to', 'EF.COM!', '>']

>>> re.split(r'(\w+)', s) # exactly split by word
['< ', 'Welcome', ' ', 'to', ' ', 'EF', '.', 'COM', '! >']

>>> re.split(r'(\s+|\w+)', s) # split by space and word
['<', ' ', '', 'Welcome', '', ' ', '', 'to', '', ' ', '', 'EF', '.', 'COM', '!', ' ', '>']

>>> ''.join(re.split(r'(\s+|\w+)', s)[::-1])
'> !COM.EF to Welcome <'

>>> ''.join(re.split(r'(\s+)', s)[::-1])
'> EF.COM! to Welcome <'

>>> ''.join(re.split(r'(\w+)', s)[::-1])
'! >COM.EF to Welcome< '

如果你觉得用切片将序列倒序可读性不高,那么其实也可以这样写。

>>> ''.join(reversed(re.split(r'(\s+|\w+)', s)))
'> !COM.EF to Welcome <'

一句话搞定,so easy!

Python翻转字符串(reverse string), 一共包含5种方法, 其中第一种最简单, 即步长为-1, 输出字符串;

方法如下

5种方法的比较:

1. 简单的步长为-1, 即字符串的翻转(常用);
2. 交换前后字母的位置;
3. 递归的方式, 每次输出一个字符;
4. 双端队列, 使用extendleft()函数;
5. 使用for循环, 从左至右输出;

代码:

# -*- coding: utf-8 -*- 
 
#eclipse pydev, python 3.3 
#by C.L.Wang 
#time: 2014. 4. 11 
 
string = 'abcdef' 
 
def string_reverse1(string): 
 return string[::-1] 
 
def string_reverse2(string): 
 t = list(string) 
 l = len(t) 
 for i,j in zip(range(l-1, 0, -1), range(l//2)): 
  t[i], t[j] = t[j], t[i] 
 return "".join(t) 
 
def string_reverse3(string): 
 if len(string) <= 1: 
  return string 
 return string_reverse3(string[1:]) + string[0] 
 
from collections import deque 
def string_reverse4(string): 
 d = deque() 
 d.extendleft(string) 
 return ''.join(d) 
 
def string_reverse5(string): 
 #return ''.join(string[len(string) - i] for i in range(1, len(string)+1)) 
 return ''.join(string[i] for i in range(len(string)-1, -1, -1)) 
 
print(string_reverse1(string)) 
print(string_reverse2(string)) 
print(string_reverse3(string)) 
print(string_reverse4(string)) 
print(string_reverse5(string))

输出:

fedcba 
fedcba 
fedcba 
fedcba 
fedcba
Python 相关文章推荐
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
python写一个md5解密器示例
Feb 23 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
Python将多个list合并为1个list的方法
Jun 27 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
python使用udp实现聊天器功能
Dec 10 Python
自学python的建议和周期预算
Jan 30 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
Apr 29 Python
Python实现代码统计工具
Sep 19 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
Python 内置函数complex详解
Oct 23 #Python
Python检测生僻字的实现方法
Oct 23 #Python
python 写入csv乱码问题解决方法
Oct 23 #Python
解决Python中字符串和数字拼接报错的方法
Oct 23 #Python
python 读写txt文件 json文件的实现方法
Oct 22 #Python
Python类属性的延迟计算
Oct 22 #Python
如何在Python函数执行前后增加额外的行为
Oct 20 #Python
You might like
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
JS交换变量的方法
2015/01/21 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
python如何查看系统网络流量的信息
2016/09/12 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
Python中作用域的深入讲解
2018/12/10 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
python 串行执行和并行执行实例
2020/04/30 Python
python中pdb模块实例用法
2021/01/15 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
高考寄语大全
2014/04/08 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
2015入党自荐书范文
2015/03/05 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python