简单谈谈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脚本操作文件的小示例分享
Aug 27 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
Python实现判断一个字符串是否包含子串的方法总结
Nov 21 Python
Python 中导入csv数据的三种方法
Nov 01 Python
Python中的集合介绍
Jan 28 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
Django 构建模板form表单的两种方法
Jun 14 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
Python基于Opencv识别两张相似图片
Apr 25 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常用文件操作函数汇总
2014/11/22 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
javascript的键盘控制事件说明
2008/04/15 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
Python单链表的简单实现方法
2014/09/23 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
python随机数分布random测试
2018/08/27 Python
html5与css3小应用
2013/04/03 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
给女儿的表扬信
2014/01/18 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
财务会计自荐信范文
2014/02/21 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
最新离婚协议书范本
2014/08/19 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
如何Python使用re模块实现okenizer
2022/04/30 Python