简单谈谈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实现二叉堆
Feb 03 Python
python实现各进制转换的总结大全
Jun 18 Python
python如何通过实例方法名字调用方法
Mar 21 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
Django自关联实现多级联动查询实例
May 19 Python
windows支持哪个版本的python
Jul 03 Python
python操作toml文件的示例代码
Nov 27 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
python自然语言处理之字典树知识总结
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小偷的核心程序
2007/04/09 PHP
PHP中的integer类型使用分析
2010/07/27 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
Python使用asyncio包处理并发详解
2017/09/09 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
大学四年职业生涯规划书范文
2014/01/02 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
财会专业大学生求职信
2014/09/26 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
通过Python把学姐照片做成拼图游戏
2022/02/15 Python
SQL Server中搜索特定的对象
2022/05/25 SQL Server