Python中五种实现字符串反转的方法

目录
  • 前言
  • 方法1
  • 方法2
  • 方法3
  • 方法4
  • 方法5

前言

一道题目是实现一个反转字符串的函数,具体如下:

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

我们可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

示例 1:

输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

自己动手操作了一下,大概有如下几种方式

方法1

如果不考虑题目中所说的“原地修改输入数组”,可以借助一个中间列表来实现

从列表的尾部向前遍历,可以通过如下2种方式定义索引:

def reverseString_1(self, s):
"""
思路:借助一个中间变量temp,然后从s的尾部提取,把元素追加到temp中
:param s:
:return:
"""
temp = []
for i in range(len(s)):
temp.append(s[len(s)-1-i])
return temp

def reverseString_2(self, s):
"""
思路:和方法4一样,不过换个实现方式(和第8题方法2用到的倒序循环一样)
:param s:
:return:
"""
temp = []
for i in range(len(s)-1, -1, -1): # range中的表示索引范围,len(s)-1表示遍历的第一个元素(也就是从最后一个元素开始遍历);
# 第一个-1表示最后一个位置,不过由于遍历范围右边不闭合,所以这里其实最终遍历的是第一个元素;
# 第二个-1表示步长,每次-1,即从后往前遍历
temp.append(s[i])
return temp

方法2

思考一下:

反转字符串其实可以转换为“首尾元素串互换”,如:第1位和倒数第1位互换、第2位和倒数第2位互换、第3位和倒数第3位互换

[1,2,3,4,5,6]
[6,5,4,3,2,1]

这样的话,可以定义2个指针,一个从首位遍历往后遍历,一个从末尾往前遍历;

然后每次遍历都交换2个位置的元素,一直遍历到中间元素;

def reverseString(self, s):
"""
:type s: List[str]
:rtype: None Do not return anything, modify s in-place instead.
"""
i = 0 # 第一个指针,从首部遍历
j = len(s) - 1 # 第二个指针,从尾部遍历

while j > i: # 如果j>i就一直循环,直到2个指针相遇
s[i], s[j] = s[j], s[i] # 交换2个位置的元素
i += 1
j -= 1
return s

方法3

这个方法比较绕,而且在提交时,由于超时导致并未通过(系统给出的数组太长导致),不过自己测试时给了几个数组,也能正常倒序输出

思路如下:既然是倒序输出,可以把第1个和第2个元素互换,然后第2个和第3个互换…直到把第1个元素挪到了最后的位置;

但是此时还未结束,这只是把第1个元素挪到了最后,还需要重复上述步骤,再把原先的第2个元素(现在的第1个元素)挪到倒数第2个位置(注意:此时的最后一个元素不能动)

按照上述步骤,把所有元素都挪动一遍,就完成了

def reverseString(self, s):
"""
思路:
:type s: List[str]
:rtype: None Do not return anything, modify s in-place instead.
"""
n = 0
while n < len(s):
i = 0
for j in range(1, len(s)-n):
s[i], s[j] = s[j], s[i]
i += 1
n += 1
return s

方法4

利用切片来实现倒序输出:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def reverseString(self, s):
"""
思路:切片

s[::-1]表示反转s中的元素
s[:]表示数组中所有子模块
s[:]=s[::-1]表示将原数组反转后赋值给s中每一个对应的位置
s=s[::-1]表示将s反转后赋值给新的对象s,与题意原地修改不符

:param s:
:return:
"""
s[:] = s[::-1]
return s

方法5

使用reverse()方法,它会对原列表进行反向排序(注意:reverse只对list有效)

def reverseString_6(self, s):
"""
:param s:
:return:
"""
s.reverse()
return s

不过reverse()方法的源码,会发现它其实就是利用的切片,如下:

到此这篇关于Python中五种实现字符串反转的方法的文章就介绍到这了,更多相关python字符串反转内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 中的反转字符串reversed(),切片

    目录 一.使用核心 Python 工具反转字符串 二.通过切片反转字符串 三.使用.join()和反转字符串reversed() 四.手动生成反转字符串 五.反转循环中的字符串 六.用递归反转字符串 七.反向遍历字符串 八.该reversed()内置功能 九.切片运算符, [::-1] 十.创建自定义可逆字符串 十一.以相反的顺序对 Python 字符串进行排序 当我们经常在代码中使用 Python 字符串时,您可能需要以相反的顺序使用它们.Python 包含一些方便的工具和技术,可以在这些情况

  • python3反转字符串的3种方法(小结)

    前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容.主要有三种方法: 1.切片法(最简洁的一种) #切片法 def reverse1(): s=input("请输入需要反转的内容:") return s[::-1] reverse1() #运行结果 In [23]: def reverse1(): ...: s=input("请输入需要反转的内容:") ...: return s[::-1] ...: ...: reverse1(

  • python反转(逆序)字符串的6种方法详细

    对于一个给定的字符串,逆序输出,这个任务对于python来说是一种很简单的操作,毕竟强大的列表和字符串处理的一些列函数足以应付这些问题 了,今天总结了一下python中对于字符串的逆序输出的几种常用的方法 方法一:直接使用字符串切片功能逆转字符串 >>> def strReverse(strDemo): return strDemo[::-1] >>> print(strReverse('jb51.net')) ten.15bj 结果: ten.15bj 方法二:遍历构

  • Python实现字符串反转的常用方法分析【4种方法】

    本文实例讲述了Python实现字符串反转的常用方法.分享给大家供大家参考,具体如下: 下面是实现python字符串反转的四种方法: 1. 切片 def rev(s): return s[::-1] 这是采用切片的方法,设置步长为-1,也就是反过来排序. 这种方法是最简洁的,也是最推荐的. 2. 这种方法与切片类似,不过比较麻烦 def rev(s): str0 = '' l = len(s)-1 while l >= 0: str0 += s[l] l -= 1 return str0 这种方法

  • python字符串反转的四种方法详解

    这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用reduce函数方法 book = 'Python程序设计' result = reduce(lambda x,y:y+x,book) print(result) 2.字符串切割 book = 'Python程序设计' print(book[::-1]) 3.用reversed方法,把字符串变成列表反转后拼接 result = reverse

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

    前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容.主要有三种方法: 1.切片法(最简洁的一种) #切片法 def reverse1(): s=input("请输入需要反转的内容:") return s[::-1] reverse1() #运行结果 In [23]: def reverse1(): ...: s=input("请输入需要反转的内容:") ...: return s[::-1] ...: ...: reverse1(

  • Python中五种实现字符串反转的方法

    目录 前言 方法1 方法2 方法3 方法4 方法5 前言 一道题目是实现一个反转字符串的函数,具体如下: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 我们可以假设数组中的所有字符都是 ASCII 码表中的可打印字符. 示例 1: 输入:["h","e","l","l","

  • Python中五种列表拷贝的方法

    目录 1. 赋值操作 2. 使用copy操作 3. 使用list()构造函数 4. 使用索引 5. 列表生成式 6 总结 1. 赋值操作 最容易想到的就是我们可以使用赋值操作来直接复制列表, 代码如下: copied_list=original_list 此时,original_list 和copyed_list 都将指向同一个列表对象. 举例如下: original_list=[1,2,3] #Copying list using assignment operation copied_lis

  • Python中三种时间格式转换的方法

    目录 一 时间元组 二 字符串与时间戳 三 时间的加减用法 一 时间元组 1. 时间元组和时间戳的互化 import time,datetime # 获取当前时间的时间元组 t = time.localtime() print(t) # 时间元组转时间戳 timestamp = time.mktime(t) print(timestamp) # time.struct_time(tm_year=2019, tm_mon=10, tm_mday=23, tm_hour=23, tm_min=15,

  • 对Python中9种生成新对象的方法总结

    先定义一个类: class Point: def __init__(self, x, y): self.x = x self.y = y 下面我们使用9种方法来生成新的对象: point1 = Point(1, 2) point2 = eval("{}({}, {})".format("Point", 1, 2)) point3 = globals()["Point"](1, 2) point4 = locals()["Point&qu

  • python中3种等待元素出现的方法总结

    目录 前言 一.强制等待 二.隐性等待 三.显性等待 总结 前言 在做web或app的自动化测试经过会出现找不到元素而报错的情况,很多时候是因为元素 还没有被加载出来,查找的代码就已经被执行了,自然就找不到元素了.那么我可以用等待 元素加载完成后再执行查找元素的code. Python里有三种等待的方式: 一.强制等待 Sleep(54) 这个方法在time模块,使用时通过from time import sleep导入 比如: Sleep(10) #表示强行等待10s再执行下一句代码 Driv

  • Python中几种操作字符串的方法的介绍

    #! -*- coding:utf-8 -*- import string s = 'Yes! This is a string' print '原字符串:' + s print '小写:' + s.lower() print '大写:' + s.upper() print '大小写转换:' + s.swapcase() print '首字母大写:' + s.capitalize() print '每个单词首字母大写:' + s.title() #各种对齐函数 print '左对齐:' + s.

  • Python 中几种字符串格式化方法及其比较

    Python 中几种字符串格式化方法及其比较 起步 在 Python 中,提供了很多种字符串格式化的方式,分别是 %-formatting.str.format 和 f-string .本文将比较这几种格式化方法. %- 格式化 这种格式化方式来自于 C 语言风格的 sprintf 形式: name = "weapon" "Hello, %s." % name C 语言的给实话风格深入人心,通过 % 进行占位. 为什么 %-formatting不好 不好的地方在于,

  • go语言中五种字符串的拼接方式(小结)

    目录 +拼接方式 sprintf函数 Join函数 buffer.Builderbuffer.WriteString函数 buffer.Builder函数 ps:直接使用运算符 主要结论 +拼接方式 这种方式是我在写golang经常用的方式,go语言用+拼接,php使用.拼接,不过由于golang中的字符串是不可变的类型,因此用 + 连接会产生一个新的字符串对效率有影响. func main() { s1 := "hello" s2 := "word" s3 :=

  • python中三种输出格式总结(%,format,f-string)

    目录 python的三种输出格式 1. % (不推荐使用) 2. format 3. f-string 对比 总结 python的三种输出格式 环境:pycharm + python3.8 1. % (不推荐使用) 格式: 格式字符串% (输出项1,输出项2,…输出项n). %c 字符 %s 字符串 %d 带符号的整数(10) %o 带符号的整数(8) %x或者 %X 带符号的整数(16) %f 或者 %F 浮点数字 使用: 案例一 num1 = 20 num2 = 30 print('num1

  • Redis中五种数据类型简单操作

    Redis中五种数据类型简单操作 提出问题 Redis五种数据类型的简单增删改查命令??? 解决问题 假设你已经安装Redis服务器: 假设你已经打开Redis cli命令行工具: 假设你对Redis有所了解: Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_key的值 127.0.0.1:6379> get ay_key "ay"

随机推荐