小说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 条评论
登录 后参与评论

相关文章

来自专栏小文博客

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

1292
来自专栏晨星先生的自留地

一道小CTF

1924
来自专栏韩伟的专栏

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

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

3398
来自专栏AzMark

Python基础知识

1294
来自专栏姬小光

正则表达式是个啥

前些天有运营 MM 问小鸡君,正则表达式是个啥啊?懂技术的同学可能会想,你个运营管啥是正则表达式干啥?

512
来自专栏Phoenix的Android之旅

什么是策略模式

策略模式应该是Java设计模式中最简单的一种模式, 它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑。

833
来自专栏java工会

深度思考编程的艺术

1688
来自专栏苍云横渡学习笔记

【day 3】python编程:从入门到实践学习笔记-if 语句(末附练习答案代码)

学习笔记目录 【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型 【day 2】python编程:从入门到实践学习笔记-列表以及其操...

3277
来自专栏CDA数据分析师

震惊小伙伴的Python单行代码

几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红。很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,...

2017
来自专栏阿杜的世界

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

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

592

扫码关注云+社区