简单谈谈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目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
解析Python编程中的包结构
Oct 25 Python
python 换位密码算法的实例详解
Jul 19 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
python实现图片批量压缩程序
Jul 23 Python
Python Cookie 读取和保存方法
Dec 28 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
Python线程条件变量Condition原理解析
Jan 20 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
python处理写入数据代码讲解
Oct 22 Python
Pandas直接读取sql脚本的方法
Jan 21 Python
python pygame 开发五子棋双人对弈
May 02 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 变量定义和变量替换的方法
2009/07/30 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
python计算方程式根的方法
2015/05/07 Python
利用Python实现图书超期提醒
2016/08/02 Python
Python查看微信撤回消息代码
2018/06/07 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
python中adb有什么功能
2020/06/07 Python
汽车检测与维修专业求职信
2013/10/30 职场文书
司机辞职报告范文
2014/01/20 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
教师专业自荐信
2014/05/31 职场文书
个人整改措施书面材料
2014/10/24 职场文书
目标责任书格式范文
2015/05/11 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
高中体育课教学反思
2016/02/16 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书