Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在 Python 中反转字符串?

如何在 Python 中反转字符串?

原创
作者头像
网络技术联盟站
发布于 2022-03-15 15:04:56
发布于 2022-03-15 15:04:56
2.9K0
举报

Python 中,字符串是 Unicode 字符的序列,尽管 Python 支持许多用于字符串操作的函数,但它没有明确设计用于反转字符串的内置函数或方法。

代码语言:txt
AI代码解释
复制
>>> 'Linuxize'.reverse()
代码语言:txt
AI代码解释
复制
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'str' object has no attribute 'reverse'

字符串反转不是编程中的常见操作,通常用于编码面试。

本文介绍了在 Python 中反转字符串的几种不同方法。

使用切片

了解 Python 中的索引如何工作对于执行字符串切片操作至关重要,通常,索引号用于访问字符串中的特定字符。

有两种类型的索引:正负索引

您可以n通过 的正索引号2或通过 的负索引号来访问字符-6:

代码语言:txt
AI代码解释
复制
>>> print('Linuxize'[2])
代码语言:txt
AI代码解释
复制
n
代码语言:txt
AI代码解释
复制
>>> print('Linuxize'[-6])
代码语言:txt
AI代码解释
复制
n

我们可以通过切片技术从字符串中调出一系列字符,切片是从给定字符串中提取子字符串序列的操作。

切片语法:

代码语言:txt
AI代码解释
复制
string[start:stop:step]
  • 第一个参数指定提取开始的索引,当使用负索引时,它表示距字符串末尾的偏移量。如果省略此参数,则切片从索引 0 开始。
  • 第二个参数指定结束提取的索引,结果不包括该stop元素。当使用负索引时,它表示距字符串末尾的偏移量。如果此参数被省略或大于字符串的长度,则切片到字符串的末尾。
  • 第三个参数是可选的,指定切片的步骤,不使用step参数时,默认为 1。使用负值时,切片以相反的顺序获取元素。

对字符串进行切片的结果是一个包含提取元素的新字符串,并且原始字符串没有被修改。

要使用切片反转字符串,请省略startandstop参数并使用负步长增量-1.

的负步长增量-1表示切片从最后一个元素开始,到第一个元素结束,产生一个反转的字符串。

代码语言:txt
AI代码解释
复制
>>> print('Linuxize'[::-1])
代码语言:txt
AI代码解释
复制
ezixuniL

您还可以定义自定义函数并使用它来反转字符串:

代码语言:txt
AI代码解释
复制
def rev_str_thru_slicing(str_):
    return str_[::-1]

INPUT_STRING = "Linuxize"

if __name__ == '__main__':
    print("INPUT STRING -", INPUT_STRING)
    print("REVERSED STRING -", rev_str_thru_slicing(INPUT_STRING))
代码语言:txt
AI代码解释
复制
Input String - Linuxize
Reversed String using Slicing - ezixuniL

使用reversed()功能

内置reserved()函数以相反的顺序处理字符串项并返回一个反向迭代器。

在下面的示例中,使用运算符将反向迭代器的元素添加到空字符串中join():

代码语言:txt
AI代码解释
复制
def rev_str_thru_join_revd(STR):
    return "".join(reversed(STR))	

INPUT_STRING = "Linuxize" 

if __name__ == '__main__':

    print("INPUT STRING -", INPUT_STRING)
    print("RESERVED STRING THROUGH JOIN & REVERSED", rev_str_thru_join_revd(INPUT_STRING))
代码语言:txt
AI代码解释
复制
Input String - Linuxize
Reserved String Through Join & Reserved Methods - ezixuniL

使用列表reverse()

要使用list 方法反转字符串reverse(),首先需要使用list构造函数将字符串转换为列表,然后使用该方法将列表项反转到位reverse(),最后使用该方法将列表项连接成一个字符串join()。

这是一个例子:

代码语言:txt
AI代码解释
复制
def rev_str_thru_list_reverse(STR):
    lst = list(STR)
    lst.reverse()
    return(''.join(lst))
 
INPUT_STRING = "Linuxize"
 
if __name__ == '__main__':
    print("Input String -", INPUT_STRING)

print("Reserved String Through List", rev_str_thru_list_reverse(INPUT_STRING))
代码语言:txt
AI代码解释
复制
Input String - Linuxize
Reserved String Through List Reverse Method - ezixuniL

使用递归函数

在 Python 中,递归函数是一个在满足某个条件之前调用自身的函数。

在下面的代码片段中,rev_str_thru_recursion函数调用自身,直到字符串长度大于零。每次调用时,都会对字符串进行切片,只留下第一个字符。稍后,它与切片字符连接。

代码语言:txt
AI代码解释
复制
def rev_str_thru_recursion(STR):
    if len(STR) == 0:
         return STR
    else:
        return rev_str_thru_recursion(STR[1:]) + STR[0]

INPUT_STRING = "Linuxize"

if __name__ == '__main__':
    print("INPUT STRING -", INPUT_STRING)

print("RESERVED STRING THROUGH RECURSION", rev_str_thru_recursion(INPUT_STRING))

对比分析

在本节中,我们将对这四种定义的方法进行简单比较,以确定它们的效率。我们将使用名为“timeit”的 Python 模块来分析性能。它提供了执行代码片段所花费的时间。“timeit”模块的“repeat”选项有助于重复代码执行一百万次。我们可以将输出理解为执行代码片段一百万次所花费的平均时间。

上表显示,Slicing 方法比 List Reverse 方法快 7 倍,比 Join & Reserved 方法快 7.5 倍,比递归方法快 83 倍。所以切片是反转字符串的最快和最好的方法。

以上结果是在相同环境下讨论的字符串反转方法的对比分析。在不同的计算环境中,数字可能会有所不同,但比例可能会保持不变。

代码语言:txt
AI代码解释
复制
if __name__ == "__main__":

    ## Performance Calculation

    import timeit
    from statistics import mean

    s = INPUT_STRING * 10
    repeatCount = 100

    SLICING_PERF = timeit.repeat(lambda: rev_str_thru_slicing(s), repeat=repeatCount)
    print(min(SLICING_PERF), mean(SLICING_PERF), max(SLICING_PERF), SLICING_PERF)

    J_R_PERF = timeit.repeat(lambda: rev_str_thru_join_revd(s), repeat=repeatCount)
    print(min(J_R_PERF), mean(J_R_PERF), max(J_R_PERF), J_R_PERF)

    LIST_PERF = timeit.repeat(lambda: rev_str_thru_list_reverse(s), repeat=repeatCount)
    print(min(LIST_PERF), mean(LIST_PERF), max(LIST_PERF), LIST_PERF)

    RECUR_PERF = timeit.repeat(lambda: rev_str_thru_recursion(s), repeat=repeatCount)
    print(min(RECUR_PERF), mean(RECUR_PERF), max(RECUR_PERF), RECUR_PERF)

结论

Python没有任何内置函数来反转字符串,但我们可以使用其他方法来反转字符串。回归测试分析表明,切片方法是反转字符串最快的方法。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
我们来看看三种Python反转字符串方法的性能差距
反转Python字符串的三种主要方法:“切片”,反转迭代和经典的就地反转算法。
Python知识大全
2020/02/13
2K0
我们来看看三种Python反转字符串方法的性能差距
leetcode: explore-strings-33 反转字符串
1、输入:一个整数,可正可负可为0 2、输出:输入值反转,但不包括符号,正数的前置0要省略 3、注意:输入与输出的数值范围都是[−2^31, 2^31 − 1],如果超出,返回0
用户7685359
2020/08/24
3340
leetcode: explore-strings-33 反转字符串
leetcode: explore-strings-32 反转字符串
leetcode explore 字符串类第一题:反转字符串。相当简单的一个题目
用户7685359
2020/08/24
2970
leetcode: explore-strings-32 反转字符串
几种方法实现“反转字符串”
如果不考虑题目中所说的“原地修改输入数组”,可以借助一个中间列表来实现 从列表的尾部向前遍历,可以通过如下2种方式定义索引
冰霜
2022/03/19
4360
几种方法实现“反转字符串”
Leetcode 344:Reverse String 反转字符串(python、java)
Write a function that reverses a string. The input string is given as an array of characters char[].
爱写bug
2019/06/30
8080
Python 反转字符串_python输出字符串
Hello everyone, in this tutorial we’ll see different ways to reverse string in Python.
全栈程序员站长
2022/11/01
8330
Python 反转字符串_python输出字符串
LeetCode每日一题 557: 反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
benny
2019/03/07
8770
LeetCode每日一题 557: 反转字符串中的单词 III
LeetCode 557:反转字符串中的单词 III Reverse Words in a String III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
爱写bug
2019/07/12
5140
LeetCode 557. 反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
freesan44
2021/08/30
9000
python基础知识——字符串
1、字符串的格式化 python将若干值插入到带有“%”标记的字符串中,实现动态地输出字符串。 格式: "%s" % str "%s%s" % (str_1, str_2) 例如: str_0
felixzhao
2018/03/16
8010
python基础知识——字符串
反转字符串还有这个用处?
https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
代码随想录
2021/07/16
4170
leecode刷题(11)-- 反转字符串
其实这道题我们很容易可以想到使用数组下标的方法,将字符串转换为 char 数组,遍历数组重新赋值。其中观察反转字符串可以知道,两个反转字符串字符的下标之和为字符串长度 - 1。
希希里之海
2019/02/15
4640
Python 实现字符串反转的9种方法[通俗易懂]
在做leetcode的试题中,做到反转整数,就涉及到字符串反转,为了尽可能可以写出更多的方法,于是写下这篇文章
全栈程序员站长
2022/07/23
2.7K0
体验智能体构建过程:从零开始构建Agent
智能体(Agents)是一种能够感知环境、做出决策并采取行动来实现特定目标的自主实体。智能体的复杂程度各不相同,从简单的响应式智能体(对刺激直接做出反应)到更高级的智能体(能够学习和适应)都有。常见的智能体类型包括:
致Great
2025/04/13
5300
体验智能体构建过程:从零开始构建Agent
小说python的字符串反转
字符串反转,这个大家平常应该时长碰到,特别是面试时,通常还有一些变种,如:判断回文。 这里列举python中的三种实现方式(切片,反向迭代,经典就地反转算法),小说一把字符串反转。 经典算法 对于从其他语言转向python的小伙伴们,最直接的实现很大概率会是这样的 def reverse_string_classic(src): """ 字符串反转,经典算法 :param src: 源字符串 :return: 反转后字符串 """ chars = lis
用户2196567
2018/07/02
7560
25个超有用的Python代码段
Python是一种通用的高级编程语言。用它可以做许多事,比如开发桌面 GUI 应用程序、网站和 Web 应用程序等。
逆锋起笔
2020/02/21
1.6K0
25个超有用的Python代码段
25个有用的 Python 代码段
作为一种高级编程语言,Python 还可以让你通过处理常见的编程任务来专注应用程序的核心功能。并且,编程语言的简单语法规则进一步简化了代码库的可读性和应用程序的可维护性。
用户6859632
2020/01/05
1.4K0
面试官让用 5 种 python 方法实现字符串反转 ?对不起我有16种……
最近身边有个朋友,因为经受不住年薪30W+的诱惑,立志转行成为一名程序员。在自学编程一个月以后,假装自己是学生哥,信心满满地和应届毕业生一起参加了校招。然而,进行了十几次面试,统统折戟沉沙。
小小詹同学
2019/11/12
1.4K0
面试官让用 5 种 python 方法实现字符串反转 ?对不起我有16种……
继续反转字符串
https://leetcode-cn.com/problems/reverse-string-ii/
代码随想录
2021/07/16
7000
力扣题目汇总(反转字符串中的单词,EXCEL表列序号,旋置矩阵)
反转字符串中的单词 III 1.题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入: "Let's take LeetCode contest" 输出: "s'teL ekat edoCteeL tsetnoc" 2.解题思路 把他弄成列表在一个个值用切片进行反转 3.解题 return [ i[::-1] for i in s] Excel表列序号 1.题目描述 给定一个Excel表格中的列名称,返回其相应的列序号。 例如,
小小咸鱼YwY
2019/07/24
5380
相关推荐
我们来看看三种Python反转字符串方法的性能差距
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档