字符串反转的实现方法总结「建议收藏」

文章目录方法1:对称交换法方法2:函数递归法方法3:列表反转法方法4:循环反向迭代法方法5:倒序切片法方法6:遍历索引法方法7:反向遍历索引法方法8:列表弹出法方法9:反向循环迭代法方法10:累积相加法方法11:匿名函数法方法12:列表倒序法方法13:双向队列排序法方法14:双向队列反转法方法1:对称交换法str=’abcdef’deff(s):s=list(s)…

大家好,又见面了,我是你们的朋友全栈君。

方法1:对称交换法

str = 'abcdef'
def f(s):
    s = list(s)
    if len(s) <=1:
        return s
    i = 0
    length = len(s)
    while i < length/2:
        s[i],s[length - 1 - i] = s[length - 1 - i],s[i]
        i += 1
    return ''.join(s)
newStr = f(str)
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: 遍历字符串前一半的元素,然后与后一半对称的那个位置的元素进行交换,以达到字符串反转。

方法2:函数递归法

str = 'abcdef'
print(str[:-1])    # str[:-1] 截取除最后一个元素外的所有元素(-1 表示最后一个元素的索引)
def fun(s):
    if len(s) <= 1:
        return s
    return s[-1] + fun(s[:-1])
newStr = fun(str)
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: 使用递归的思想,建立函数,倒序添加字符串,直到字符串长度小于等于1后停止。

方法3:列表反转法

str = 'abcdef'
ll = list(str)  # list()方法将字符串转换成了列表 ['a', 'b', 'c', 'd', 'e', 'f']
ll.reverse()    # 将list反转,变成了 ['f', 'e', 'd', 'c', 'b', 'a']
newStr = ''.join(ll)  # 采用join()方法遍历列表,合并成一个字符串
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: Python中,列表可以进行反转,我们只要把字符串转换成列表,使用reverse()方法,进行反转,然后再使用字符串的join()方法遍历列表,合并成一个字符串。

方法4:循环反向迭代法

str1 = 'abcdef'
str2 = ''
for i in str1:
    str2 = i + str2
print('反转前的字符串:', str1)    # abcdef
print('反转后的字符串:', str2)    # fedcba

说明: 字符串属于序列的一种,我们可以使用for循环遍历字符串,然后,不断反向赋值给变量str2,最后输出变量str2,就完成了字符串反转。

方法5:倒序切片法

str = 'abcdef'
newStr = str[::-1]
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: 利用切片特性,一步到位

方法6:遍历索引法

str = 'abcdef'
newStr = ''
for i in range(1, len(str)+1):
    newStr = newStr + str[-i]
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: *字符串作为序列,可以进行索引处理,所以我们先遍历索引数字,然后倒序提取字母,然后合并成字符串。

方法7:反向遍历索引法

str = 'abcdef'
newStr = ''
print(len(str))                        # 6
for i in range(len(str)-1, -1, -1):
    newStr = newStr + str[i]
print('反转前的字符串:', str)            # abcdef
print('反转后的字符串:', newStr)         # fedcba

说明: range()函数有三个参数:start,end,step,且左闭右开,我们从最后一个索引开始,最开始的索引结束,倒序遍历索引,然后反向提取字符串,最后合并

方法8:列表弹出法

str = 'abcdef'
str = list(str)  # 将字符串str转换成列表 ['a', 'b', 'c', 'd', 'e', 'f']
newStr = ''
while len(str) > 0:
    newStr = newStr + str.pop()
print('反转后的字符串:', newStr)     # fedcba

说明: 列表有一种弹出的方法pop(),默认弹出的是最后一个元素。每弹出一个元素就加入到空字符串 newStr中,最终实现原字符串的反转。

方法9:反向循环迭代法

str = 'abcdef'
newStr = ''
for i in str[::-1]:
    newStr = newStr + i
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

代码改进:

str = 'abcdef'
newStr = ''.join(i for i in str[::-1])
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: 使用列表解析式,然后通过join()方法,反转合并字符串。

方法10:累积相加法

str = 'abcdef'
from functools import reduce
def f(x,y):
    return y + x
newStr = reduce(f,str)
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: 使用python中的reduce()函数。先创建一个字符串倒序相加函数,然后将字符串和新创建的函数一起传入reduce()函数中,进行字符串倒序累积相加,最后实现反转字符串。

方法11:匿名函数法

str = 'abcdef'
from functools import reduce
newStr = reduce(lambda x,y:y+x,str)
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明:方法10的进阶版,使用lambda匿名函数创建字符串倒序相加函数,然后进行累积相加,得到字符串反转结果。

方法12:列表倒序法

str = 'abcdef'
ll = list(str)    # 将字符串str转换成列表 ['a', 'b', 'c', 'd', 'e', 'f']
ll.sort(reverse=True)   # 列表降序排列
newStr = ''.join(ll)
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: 采用列表的sort(reverse=True)方法,降序排列,不过,这一方法有个弊端,它并不是按字符串的顺序进行升序或降序排列,而是按 “ASCII 字符顺序” 进行排序,所以,如果字符串不是按从小到大排列,那么运行后,排序会是错误的。

方法13:双向队列排序法

str = 'abcdef'
import collections
newStr = collections.deque()
for i in str:
    newStr.appendleft(i)
newStr = ''.join(newStr)
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: 遍历字符串,向左添加入双向队列中,最后使用join()方法合并,实现字符串反转。

方法14:双向队列反转法

str = 'abcdef'
import collections
newStr = collections.deque()
newStr.extend(list(str))
newStr.reverse()
newStr = ''.join(newStr)
print('反转前的字符串:', str)        # abcdef
print('反转后的字符串:', newStr)     # fedcba

说明: 同样使用双向队列,把字符串转换成列表添加到队列中,然后整个进行反转,使用join()方法合并,实现字符串反转。

文章参考: 小詹学Python 公众号的 《面试官让用 5 种 python 方法实现字符串反转 ?对不起我有16种……》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127982.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于kafka集群搭建前后

    关于kafka集群搭建前后近期搭建了kafka集群服务器,遇到了问题进行记录1.遇到某台服务器网卡出现问题,导致无效,因为网卡是集成的,即是zookeeper组中一个,也是kafka的brokers之一解决办法:重新更换服务器,重装系统,进行安全配置,在配置好zookeeper和kafka,和损坏的服务器一样的配置2.替换服务器后,遇到过了数据量太大,其中替换的服务器磁盘利用率不断增加,达到最大值,导致服务启动

    2022年4月29日
  • 阿里云证书含金量高吗_阿里云的域名证书在哪里下载

    阿里云证书含金量高吗_阿里云的域名证书在哪里下载本文分享,如何在阿里云申请免费的HTTPS证书

    2022年9月28日
  • C语言 JSON数据格式解析

    C语言JSON数据格式解析一、如何用c语言编写与解析json数据格式,这篇主要是使用一个第三方的json库,本人已经上传至csdn,下载链接在下方。 二、json库代码文件下载地址(json.rar内部只有两个文件json.h与json.c) 1.http://download.csdn.net/download/jxyb2012/10234057

    2022年4月6日
  • 以太坊(ETH)挖矿最新教程_以太坊个人挖矿

    以太坊(ETH)挖矿最新教程_以太坊个人挖矿以太坊(ETH)挖矿最新教程目前网上的大多数以太坊挖矿教程是很早整理编写的,基本都已过时不适用了。但挖矿是一个技术持续升级更新的过程,因此根据最新实战情况编写了本文,并争取在以后抽时间持续保持跟进更新。一.基本要求ETH 挖矿主要是使用显卡来挖矿。因此你需要一台拥有以下设备的PC(矿机):显卡、主板、电源、CPU、内存(推荐4G)、硬盘(推荐60G的SSD)、PCI-E转接线

    2022年10月15日
  • idea启动tomcat控制台乱码_idea tomcat 乱码

    idea启动tomcat控制台乱码_idea tomcat 乱码最近在部署web项目启动tomcat时日志乱码了,很难受,试着很多方法也没有解决,最后的解决方法让我大跌眼镜,故记录一下,建议看到最后:1.修改本地tomcat下conf目录下logging.properties文件内容新增java.util.logging.ConsoleHandler.encoding=GBK2.修改tomcat下bin-catalina.bat文件3.在tomcat的conf-server.xml中修改4.在idea中修改配置ps:如果还是不行,就跟我今天遇到的

    2022年9月25日
  • xshell安装步骤_Xshell6

    xshell安装步骤_Xshell6开发环境部署目的:利用ssh远程登陆服务器(在windows系统下远程连接linux)下载XSHELL7XSHELL7下载网址:https://www.netsarang.com/zh/xshell/点击“下载”点击“免费授权界面”以上是XSHELL7的下载过程然后找到右键“以管理员身份运行”一上来会出现这种错误,先点击“是(Y)”过程中一直点击“下一步”,以及“我同意”类似的,然后选择个安装路径就可以没啥特殊的。到最后一切顺利的话会显示下面这样的界面一般通向成功的道

    2022年9月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号