简单谈谈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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
python使用xauth方式登录饭否网然后发消息
Apr 11 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
python 将字符串中的数字相加求和的实现
Jul 18 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
Python新手学习装饰器
Jun 04 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
详解python中的异常和文件读写
Jan 03 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
php eval函数用法总结
2012/10/31 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
javascript cookies操作集合
2010/04/12 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
Python实现身份证号码解析
2015/09/01 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
Python 的AES加密与解密实现
2019/07/09 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
介绍一下linux的文件系统
2012/03/20 面试题
设计师个人求职信范文
2014/02/02 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
校园广播稿100字
2014/10/06 职场文书
公安机关起诉意见书
2015/05/20 职场文书
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫