日期:2018/12/19

最近刚学习了Python的入门课程,准备寻找你的进阶门路,偶尔得到一个老同事微信分享,标题让我这种greenhand心砰砰砰...

好了,看标题:

面试官让用 5 种 python 方法实现字符串反转 ?对不起我有16种……

放链接:

https://mp.weixin.qq.com/s?__biz=MzU0OTU5OTI4MA==&mid=2247485774&idx=2&sn=5044d0c47e13f5d98aa10608b45be6b5&chksm=fbac2811ccdba107cd721d784098cc431b95fc468f7af580340f9e33fa5f9ab4a36ece684b9e&mpshare=1&scene=1&srcid=1219boMIXskRznVvMY5jRpnG&from=singlemessage&ascene=1&devicetype=android-27&version=26060739&nettype=cmnet&abtest_cookie=BAABAAoACwASABQABAAllx4AV5keAJuZHgClmR4AAAA%3D&lang=zh_CN&pass_ticket=r%2BXIohrbTiL%2FnZiTtmpiMk6LHImwbhdifaIs8kalFj%2FdvcG%2ForO1nlDJsYcNqfuv&wx_header=1

好了,上面的是给各位看的,下面是greenhand自己敲的代码,学习代码不能只看,必须得敲敲敲,没有敲糊掉整个键盘字母的人不配说自己学过代码。。。。。。。

方法一:反转列表法

1 a = 'abcdef'
2 b = list(a)
3 b.reverse()
4 b = ''.join(b)
5 print(b)

此方法利用先将字符串转换为列表,然后利用列表的reverse()方法将各元素反转出来,最后利用join()函数将列表的各个元素连接成字符串;

方法二:正向循环法

1 a = 'abcdef'
2 b = ''
3 for i in a:
4 b = i + b
5 print(b)

此方法将原字符串中的字符正序取出,然后将取出的字符串通过+操作与新字符串连接

方法三:反向循环法:

1 a = 'abcdef'
2 b = ''
3 for i in a[::-1]:
4 b = b + i
5 print(b)

此方法将原字符串中的字符逆序取出,并用新字符串与取出的字符执行+操作;

方法四:倒叙切片法:

1 a = 'abcdef'
2 b = a[::-1]
3 print(b)

a[::-1]是将列表反过来,so easy!!

方法五:遍历索引法

1 a = 'abcdef'
2 b = ''
3 for i in range(len(a)+1):
4 b += a[-i]
5 print(b)

此方法将通过索引号逆向取出每个元素,并将元素内容添加 到新的字符串中

方法六:列表弹出法

1 a = 'abcdef'
2 b = ''
3 a = list(a)
4 while len(a) > 0:
5 b += a.pop()
6 print(b)

此方法利用列表的pop()方法依次弹出栈底,即列表的最后一个元素,进行反转

方法七:累积相加法

1 a = 'abcdef'
2 from functools import reduce
3 def exchange(x,y):
4 return y + x
5 b = reduce(exchange,a)
6 print(b)

此方法借助了reduce(function,iterable[,initializer])对iterable中元素的function作用。

1、先定义了两个exchange(),实现两个字符的交换(在这个场景下+实现的是字符交换,如果传递的参数是数值,这是累积求和);

2、reduce利用exchange先交换字符串中第1,2个元素,然后得到的结果与第三个字符重复执行exchange,依次向下,最后得到逆序字符串

方法八:匿名函数法

1 a = 'abcdef'
2 from functools import reduce
3 b = reduce(lambda x, y: y+x, a)
4 print(b)

这是方法七的升级版,理解了reduce的使用,代码简化更条理。

方法九:列表倒叙法

1 a = 'abcdef'
2 a = list(a)
3 a.sort(reverse=True)
4 b = ''.join(a)
5 print(b)

sort(reverse=True)方法,倒序排列。

这个方法有一个弊端,不是按字符串的顺序进行升序或降序排列,而是按英语26个字母进行排序,所以,如果字符串不是按从小到大排列,那么运行后,排序会是错误的。

方法十:双向队列左装法

1 a = 'abcdef'
2 import collections
3 b = collections.deque()
4 for i in a:
5 b.appendleft(i)
6 b = ''.join(b)
7 print(b)

此方法借助数据结构:双向队列,方便的向序列的两边进行添加,删除元素。

通过遍历的方式一次获取了字符串元素,然后通过左插入的方式向队列插入元素,最后再通过join()的方法组合成字符串

方法十一:双向队列逆序法

1 a = 'abcdef'
2 import collections
3 b = collections.deque()
4 b.extend(list(a))
5 b.reverse()
6 b = ''.join(b)
7 print(b)

此方法通过extend()原字符串的内容插入到目的字符串中,然后再利用[::-1]反转字符串。

方法十二:一维数组结构

1 a = 'abcdef'
2 import pandas as pd
3 b = pd.Series(list(a))
4 b = ''.join(b[::-1])
5 print(b)

通过pandas的Series生成一维数组结构,再进行反转
方法十三:递归函数方法

1 a = 'abcdef'
2 def f(a):
3 if len(a) <= 1:
4 return a
5 return a[-1] + f(a[:-1])
6 b = f(a)
7 print(b)

采用递归函数,注意递归结束的条件;

方法十四:对称交换法

 1 a = 'abcdef'
2 def f(a):
3 a = list(a)
4 if len(a) <=1:
5 return a
6 i = 0
7 length = len(a)
8 while i < length/2:
9 a[i],a[length - 1 - i] = a[length - 1 - i],a[i]
10 i += 1
11 return ''.join(a)
12 b = f(a)
13 print(b)

在以往的数值互换中,我们都需要借助临时变量tmp实现a = 2,b = 3的互换,但在python中可以直接通过 a,b= b,a实现,此方法也是Python特有的方法。

上面例子就是取对称位置的数值按照python特有的方法交换两个对称位置处的字符达到反转的目的。

方法十五:列表解析式法

1 a = 'abcdef'
2 b = ''.join(i for i in a[::-1])
3 print(b)

方法三的简便写法,使用列表解析式,简化代码书写。最后同样通过join()方法,反转合并字符串

方法十六:反向遍历法

1 a = 'abcdef'
2 b = ''
3 for i in range(1, len(a[::-1])+1):
4 b += a[-i]
5 print(b)

此方法是方法五的逆向思维,个人更倾向于将这种方法归纳为方法五的另一种表达方式

最新文章

  1. Mysql - 函数
  2. 浅谈设计模式--组合模式(Composite Pattern)
  3. java list倒序输出及复制list集合
  4. http--响应请求状态码
  5. [瞎JB写] C++多态
  6. Linux常用命令_(系统管理)
  7. 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群
  8. HDU 4343 D - Interval query 二分贪心
  9. 源代码jar包中中文注释乱码
  10. jsonp多次请求报错 not a function的解决方法
  11. DOM解析原理
  12. hdu 找新朋友
  13. Java学习笔记---继承和super的用法
  14. 【转】Appium测试安卓Launcher以滑动窗体获得目标应用
  15. 201521123003《Java程序设计》第6周学习总结
  16. Swift - use Array
  17. LodopJS文档式模版的加载和赋值
  18. ubuntu “无法获得锁 /var/lib/dpkg/lock -open”
  19. python---redis的python使用
  20. javaweb下载中的一个问题

热门文章

  1. JZOJ 3184. 【GDOI2013模拟7】最大异或和
  2. JZOJ 捕老鼠
  3. CentOS 搭建 samba 服务器并通过 Windows 访问
  4. 并发JUC
  5. MySql创建高性能的索引
  6. Deer_GF之UI界面制作
  7. UISelector
  8. react+Native使用typeScript
  9. Centos7.6centOS7.8多网卡多IP配置
  10. Nginx--logrotate日志切割打包