为了账号安全,请及时绑定邮箱和手机立即绑定

用Python反转字符串

用Python反转字符串

芜湖不芜 2019-05-30 13:02:25
用Python反转字符串没有内置的reverse函数用于Python的str对象。实现此方法的最佳方法是什么?如果提供一个非常简洁的答案,请详细说明它的效率。例如,是否str对象被转换为不同的对象等。
查看完整描述

4 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

不如:

>>> 'hello world'[::-1]'dlrow olleh'

这是扩展切片语法。它通过做[begin:end:step]-通过离开开始和结束并指定一个步骤-1,它将反转一个字符串。


查看完整回答
反对 回复 2019-05-30
?
潇湘沐

TA贡献1816条经验 获得超6个赞

@Paolo‘ss[::-1]是最快的;一种较慢的方法(可能更易读,但这一点值得商榷)是''.join(reversed(s)).


查看完整回答
反对 回复 2019-05-30
?
翻阅古今

TA贡献1780条经验 获得超5个赞


快速回答(TL;DR)

### example01 -------------------

mystring  =   'coup_ate_grouping'

backwards =   mystring[::-1]

print backwards


### ... or even ...

mystring  =   'coup_ate_grouping'[::-1]

print mystring


### result01 -------------------

'''

gnipuorg_eta_puoc

'''

详细答复

背景

提供这一答复是为了解决@odigity引起的以下关切:

哇。一开始我对保罗提出的解决方案感到震惊,但当我读到第一条评论时,我对这种恐惧退避三舍:“那是非常重要的节奏曲。干得好!”我感到非常不安,一个如此聪明的社区认为使用如此神秘的方法来做一些如此基本的事情是个好主意。为什么不只是.反向()?

问题

  • 语境

    • Python2.x
    • Python 3.x
  • 设想:

    • 开发人员希望转换一个字符串。
    • 转换是反转所有字符的顺序。

陷阱

  • 开发人员可能会期望类似的

    string.reverse()

  • 土生土长的习语

    毕多尼

    “)新开发人员可能无法阅读解决方案
  • 开发人员可能会尝试实现他或她自己的版本。

    string.reverse()

    以避免切片表示法。
  • 在某些情况下,切片表示法的输出可能违反直觉:
    • print 'coup_ate_grouping'[-4:]    ## => 'ping'

    • 相比较
    • print 'coup_ate_grouping'[-4:-1]  ## => 'pin'

    • 相比较
    • print 'coup_ate_grouping'[-1]  ## => 'g'

    • 例如,见实例02。
    • 索引的不同结果

      [-1]

      可能会让一些开发人员

理据

Python有一个特殊的情况需要注意:字符串是可迭代类型。

排除string.reverse()方法是鼓励python开发人员充分利用这种特殊环境的力量。

简单地说,这意味着字符串中的每个单独字符都可以很容易地作为元素顺序排列的一部分来操作,就像其他编程语言中的数组一样。

要理解这是如何工作的,回顾一下示例02可以提供一个很好的概述。

第02条

### example02 -------------------

## start (with positive integers)

print 'coup_ate_grouping'[0]  ## => 'c'

print 'coup_ate_grouping'[1]  ## => 'o' 

print 'coup_ate_grouping'[2]  ## => 'u' 


## start (with negative integers)

print 'coup_ate_grouping'[-1]  ## => 'g'

print 'coup_ate_grouping'[-2]  ## => 'n' 

print 'coup_ate_grouping'[-3]  ## => 'i' 


## start:end 

print 'coup_ate_grouping'[0:4]    ## => 'coup'    

print 'coup_ate_grouping'[4:8]    ## => '_ate'    

print 'coup_ate_grouping'[8:12]   ## => '_gro'    


## start:end 

print 'coup_ate_grouping'[-4:]    ## => 'ping' (counter-intuitive)

print 'coup_ate_grouping'[-4:-1]  ## => 'pin'

print 'coup_ate_grouping'[-4:-2]  ## => 'pi'

print 'coup_ate_grouping'[-4:-3]  ## => 'p'

print 'coup_ate_grouping'[-4:-4]  ## => ''

print 'coup_ate_grouping'[0:-1]   ## => 'coup_ate_groupin'

print 'coup_ate_grouping'[0:]     ## => 'coup_ate_grouping' (counter-intuitive)


## start:end:step (or start:end:stride)

print 'coup_ate_grouping'[-1::1]  ## => 'g'   

print 'coup_ate_grouping'[-1::-1] ## => 'gnipuorg_eta_puoc'


## combinations

print 'coup_ate_grouping'[-1::-1][-4:] ## => 'puoc'

结语

这个认知负荷与理解python中的片表示法是如何工作相关的,对于一些不愿投入大量时间学习这种语言的采用者和开发人员来说,这确实是太过了。

然而,一旦基本原理被理解,这种方法相对于固定的字符串操作方法的威力可能是相当有利的。

对于那些不这样认为的人,有其他方法,例如lambda函数、迭代器或简单的一次性函数声明。

如果需要的话,开发人员可以实现她自己的字符串.反向()方法,但是了解python这方面的基本原理是很好的。

另见


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 900 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信