写点什么

Python 应用之反转字符串

作者:向阳逐梦
  • 2022 年 10 月 04 日
    四川
  • 本文字数:1267 字

    阅读完需:约 4 分钟

1.问题描述

请用户输入一个字符串,将其进行反转,输出反转后的字符串如将字符串'abcde', 反转为'edcba'。

2.具体思路

字符串是有序的排列,反转字符串可用 for 循环、反向切片、反转列表、递归、reduce 函数等方法。

方法一:for 循环

a = input("请输入字符串:")b = ''for i in a:    b = i + bprint(b)
复制代码

第 1 行: 用 input 函数获取用户输入的字符串,赋值给变量 a

第 2 行: 创建变量 b,赋值为一个空字符串

第 3 行: 由于字符串是有序的排列,用 for 循环遍历 a 中的每一个元素

第 4 行: 每次循环都将循环变量 i 与变量 b 连接起来,再赋值给变量 b,循环结束时,b 为 a 的反向字符串第 5 行: 输出变量 b

以字符串'yth'为例

第一次循环,i = 'y', b = 'y'

第二次循环,i = 't', b = 't' + 'y' => 'ty'

第三次循环,i = 'h', b = 'h' + 'ty' =>'hty'

方法二:反向切片

a = input("请输入字符串:")b = a[::-1]print(b)
复制代码

第 1 行: 用 input 函数获取用户输入的字符串,赋值给变量 a

第 2 行: 对字符串 a 切片,步长为-1, 即字符串的反转,将反转结果赋值给变量 b

第 3 行: 输出变量 b

方法三:反转列表

a = input("请输入字符串:")b = list(a)b.reverse()c = ''.join(b)print(c)
复制代码

第 1 行: 用 input 函数获取用户输入的字符串,赋值给变量 a

第 2 行: 创建变量 b,将用户输入的字符串转化为字符串列表

第 3 行: reverse() 方法反转元素的排序顺序,用 reverse()方法对列表 b 进行反转

第 4 行: 用字符串的 join()方法遍历列表,合并成一个字符串

第 5 行: 输出变量 c

方法四:递归

a = input("请输入字符串:")def f(x):    if len(x) <= 1:        return x    return f(x[1:]) + x[0]
print(f(a))
复制代码

第 1 行: 用 input 函数获取用户输入的字符串,赋值给变量 a

第 2 行: 定义函数 f,传入参数 x

第 3-4 行: 设定递归算法的结束条件,即当参数 x 的长度 小于或等于 1 时,返回值为 x

第 5 行: 否则返回值为 f(x[1:]) + x[0]

第 7 行: 为参数 x 赋值为 a, 并输出 f(a)的结果

以字符串 'abcde' 为例

对于 f('abcde'), 返回值为 f('bcde') + 'a'

对于 f('bcde'), 返回值为 f('cde') + 'b'

对于 f('cde'), 返回值为 f('de') + 'c'

对于 f('d'), 返回值为 f('e') + 'd'

对于 f('e'), 返回值为 'e' (因为 len(e) = 1)

所以:

f('de')为'e' + 'd' => 'ed'

f('cde')为'ed' + 'c' => 'edc'

f('bcde')为'edc' + 'b' =>'edcb'

f('abcde')为'edcb' + 'a' =>'edcba'

方法五:reduce 函数

from functools import reducea = input("请输入字符串:")b = reduce(lambda x, y: y + x, a)print(b)
复制代码

第 1 行: 从 functools 模块中导入 reduce()函数

第 2 行: 用 input 函数获取用户输入的字符串,赋值给变量 a

第 3 行: 调用 reduce 函数,使用 lambda 表达式输出反转字符串,并赋值给变量 b

第 4 行: 输出变量 b

以字符串 'abcde' 为例

x = 'a' y = 'b'; y + x => 'b' + 'a' => 'ba'

x = 'ba' y = 'c'; y + x => 'c' + 'ba' => 'cba'

x = 'cba' y = 'd'; y + x => 'd' + 'cba' => 'dcba'

x = 'dcba' y = 'e'; y + x => 'e' + 'dcba' => 'edcba'

关于 reduce 函数和 lambda 表达式,大家可以查看阶乘的那篇文章哟。里面有关于该函数和表达式的描述以及应用实例介绍。


发布于: 刚刚阅读数: 3
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022.06.01 加入

InfoQ签约作者、阿里云“乘风者计划”签约博主

评论

发布
暂无评论
Python应用之反转字符串_10月月更_向阳逐梦_InfoQ写作社区