小说python的字符串反转

字符串反转,这个大家平常应该时长碰到,特别是面试时,通常还有一些变种,如:判断回文。

这里列举python中的三种实现方式(切片,反向迭代,经典就地反转算法),小说一把字符串反转。

经典算法

对于从其他语言转向python的小伙伴们,最直接的实现很大概率会是这样的

def reverse_string_classic(src):
    """
    字符串反转,经典算法
    :param src: 源字符串 
    :return: 反转后字符串
    """
    chars = list(src)
    for i in range(len(src) // 2):
        tmp = chars[i]
        chars[i] = chars[len(src) - i - 1]
        chars[len(src) - i - 1] = tmp
    return ''.join(chars)

熟悉的c/c++的味道,没有任何python的美感,但就是这么直接了当,不伤脑

切片

了解和熟悉python切片操作的同学,应该会这么做了

def reverse_string_slicing(src):
    """
    字符串反转,切片实现
    :param src: 源字符串
    :return: 反转后字符串
    """
    return src[::-1]

就是这么pythonic,但不熟悉的小伙伴就是一脸懵逼,这个伤脑

反向迭代

熟悉和了解python的iterator的小伙伴还有这种实现方式

def reverse_string_iterate(src):
    """
    字符串反转,反向迭代实现
    :param src: 源字符串
    :return: 反转后字符串
    """
    return "".join(reversed(src))

这看着也很pythonic,感觉无理解成本

性能PK

简单的对这三种方式做个性能测试

从测试结果可见:

三种方式存在很大的差距,切片方式最快,反向迭代的方式比切片慢了近7倍,而经典方式比切片慢了近50倍

简单总结:

1. 经典方式,直接放弃吧,unpythonic,效率还差

2. 如果单从效率上看,切片方式是最佳选择,但可读性差,理解成本高

3. 迭代切片方式性能还凑合,可读性好,在性能要求不高或是没有这么密集反转操作时,可以选择

原文发布于微信公众号 - chafezhou(gh_5b8f0c59b682)

原文发表时间:2018-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阿杜的世界

《重构》阅读笔记-代码的坏味道

开发者必须通过实践培养自己的经验和直觉,培养出自己的判断力:学会判断一个类内有多少个实例变量算是太大、学会判断一个函数内有多少行代码才算太长。

692
来自专栏老九学堂

学习C语言的用途以及如何快速掌握C语言

C是基础的语言 被广泛用于操作系统和编译器的开发 功能非常强 虽然现在不是最流行但它是 最基础的东西 也是比较好学的语言 如:金山的创始人江明 从30...

3747
来自专栏java工会

深度思考编程的艺术

1728
来自专栏take time, save time

你所能用到的数据结构(六)

八、数据结构不一定很枯燥   正如我现在实习的公司的一个同事说的那样,数据结构是一本催眠的书,我想对于大多数人应该是这样的,当然对我也是,看着一大堆的算法,结...

3265
来自专栏小文博客

蓝桥杯 C语言省赛 习题1 奖券数目

1602
来自专栏AzMark

Python基础知识

1424
来自专栏CDA数据分析师

飞跃式发展的后现代 Python 世界

如果现代Python有一个标志性特性,那么简单说来便是Python对自身定义的越来越模糊。在过去的几年的许多项目都极大拓展了Python,并重建了“Python...

2076
来自专栏申龙斌的程序人生

零基础学编程033:字符串的split拆分与join连接

在《零基础学编程021:获取股票实时行情数据》这一节里,我们学了split()函数,可以将一个字符串切开。假设有一个历史行情字符串,信息包括:股票名称、开盘价、...

29411
来自专栏韩伟的专栏

你真的理解数码技术吗?(二)

1.2 文字是如何用数字来记录的 在人类创造的各种信息当中,文字信息一直被我们认为是知识和智慧的重要载体,古代无数僧侣和学者,终身都献身于书籍文字的保存和传达...

3468
来自专栏nimomeng的自我进阶

探索命名之美(二)

大家在编码或者读代码的过程中,对于什么样的命名是好的命名可能认知不是特别清晰,但是对于什么样的命名是坏的命名应该一目了然,他们包括:

752

扫码关注云+社区