Python 反转字符串(reverse)的方法小结


Posted in Python onFebruary 20, 2018

前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容。主要有三种方法:

1.切片法(最简洁的一种)

#切片法
def reverse1():
 s=input("请输入需要反转的内容:")
 return s[::-1]
reverse1()

#运行结果
In [23]: def reverse1():
 ...: s=input("请输入需要反转的内容:")
 ...: return s[::-1]
 ...: 
 ...: reverse1()

请输入需要反转的内容:你是一个小南瓜
Out[23]: '瓜南小个一是你'

参考stackflow上的答案。
原理是:This is extended slice syntax. It works by doing [begin:end:step] - by leaving begin and end off and specifying a step of -1, it reverses a string.

切片介绍:切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束,第三个数(冒号之后)表示切片间隔数。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。注意,返回的序列从开始位置开始 ,刚好在结束位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。

这样,a[1:3]返回从位置1开始,包括位置2,但是停止在位置3的一个序列切片,因此返回一个含有两个项目的切片。类似地,a[:]返回整个序列的拷贝。a[::3]返回位置3,位置6,位置9…的序列切片。

也可以用负数做切片。负数用在从序列尾开始计算的位置。例如,a[:-1]会返回除了最后一个项目外包含所有项目的序列切片,shoplist[::-1]会返回倒序序列切片。

举一个完整例子,读入用户输入并反转字符串,并写入到文件中

#!/usr/bin/python
import sys
#打开文件进行写入
myfile=open('test.txt','w') 
while 1:
 print "input your string \n"
 #readline会读入最后的换行符
 line=sys.stdin.readline()
 #判断输入是否为空字符串
 if line.strip('\n')=='':
  break
 #原输入字符串合并上反转的字符串
 allmessage=line[:-1]+line.strip('\n')[::-1]
 print allmessage
 #输入及转换后的字符串写入到文件中
 myfile.write(allmessage+'\n')
#记得关闭文件操作流
myfile.close()

用shell bash方法可以如下:

#! /bin/sh
while true
do
  echo "Pls enter your string" "\n"
  read my
  if [ -z $my ];
  then
   break
  fi
  remy=$(echo $my | rev)
  echo $my$remy
  echo $my$remy >> test.txt
done

2.递归

#递归反转
def reverse2(s):
 if s=="":
 return s
 else:
 return reverse2(s[1:])+s[0]
reverse2("sidfmawsmdisd是当面问")

#运行结果
In [24]: def reverse2(s):
 ...: if s=="":
 ...: return s
 ...: else:
 ...: return reverse2(s[1:])+s[0]
 ...: 
 ...: reverse2("sidfmawsmdisd是当面问")
Out[24]: '问面当是dsidmswamfdis'

3.借用列表,使用reverse()方法
Python中自带reverse()函数,可以处理列表的反转,来看示例:

In [25]: l=['a', 'b', 'c', 'd']
 ...: l.reverse()
 ...: print (l)
['d', 'c', 'b', 'a']

reverse()函数将列表的内容进行了反转,借助这个特性,可以先将字符串转换成列表,利用reverse()函数进行反转后,再处理成字符串。

#借用列表,使用reverse()方法
def reverse3(s):
 l=list(s)
 l.reverse()
 print("".join(l))
reverse3("soifmi34pomOsprey,,是")

#运行结果
In [26]: def reverse3(s):
 ...: l=list(s)
 ...: l.reverse()
 ...: print("".join(l))
 ...: 
 ...: reverse3("soifmi34pomOsprey,,是")
 ...: 
是,,yerpsOmop43imfios

Python字符串反转

对于str类型,python并没有reverse函数。然而,通过反向步进切片,我们可以高效地反转一串字符串。

s = 'abcde' 
s[::-1]

好吧,只支持英文字符。

以下是SpikeKing的内容

原文:http://blog.csdn.net/caroline_wendy/article/details/23438739

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

继续补充一个方法

def reverse(str):
 alist = list(str)
 alist.reverse()
 new_str = ''.join(alist)
 return new_str
print reverse('3water.com')

经测试输出完全正确。

Python里面 str[::-1] 使得字符串翻转的原理是什么

我觉得很多人不理解这个语法是把俩冒号看成一个符号了,其实这是两个冒号,而不是一个双冒号符

给你一个例子看看:

>>> a='0123456'

>>> a[1:5]'1234'

返回结果是1234,能理解么?第一位到第五位切片(初始是0位)

>>> a[1:5:2]'13'

这个呢?能理解么?1-5位切片,步进为2,所以取出来是‘13'那么问题就来了[::-1]表示的是从头到尾,步长为-1,你感受一下。你可以尝试吧-1改一下,比如[::-2]

这篇文章就介绍到这,希望大家以后多多支持三水点靠木。

Python 相关文章推荐
python 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 Python
Python中异常重试的解决方案详解
May 05 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
Jan 29 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
代码实例讲解python3的编码问题
Jul 08 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
Python-opencv 双线性插值实例
Jan 17 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 Python
python如何实现int函数的方法示例
Feb 19 #Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 #Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 #Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 #Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 #Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 #Python
python快速建立超简单的web服务器的实现方法
Feb 17 #Python
You might like
咖啡的植物学知识
2021/03/03 咖啡文化
360通用php防护代码(使用操作详解)
2013/06/18 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
法制宣传标语
2014/06/23 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
股权转让协议范本
2014/12/07 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
大学运动会通讯稿
2015/07/18 职场文书
电力培训学习心得体会
2016/01/11 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
oracle数据库去除重复数据
2022/05/20 Oracle