Python 实现字符串反转的9种方法[通俗易懂]

在做leetcode的试题中,做到反转整数,就涉及到字符串反转,为了尽可能可以写出更多的方法,于是写下这篇文章 样例:如a=’123456789′ 反转成a=’987654321’第一种方法:使用字符串切片>>> a=’123456789′ >>> a = a[::-1]’987654321’第二种方法:使用reversed()…

大家好,又见面了,我是你们的朋友全栈君。

在做leetcode的试题中,做到反转整数,就涉及到字符串反转,为了尽可能可以写出更多的方法,于是写下这篇文章

 

样例:如 a=’123456789′ 反转成 a=’987654321′

第一种方法:使用字符串切片

>>> a='123456789' 
>>> a = a[::-1]

'987654321'

第二种方法:使用reversed() 可读行好,但速度较慢

 

>>> ''.join(reversed('123456789'))
'987654321'

封装使用

def reversed_string(a_string):
    return a_string[::-1]

>>> reversed_string('123456789')
'123456789'

注意:

python的str对象中没有内置的反转函数

python字符串相关基础知识:

  1. python中,字符换是不可变,更改字符串不会修改字符串,而是创建一个新的字符串。

  2. 字符串是可切片,切片字符串会以给定的增量从字符串中的一个点(向后或向前)向另一个点提供一个新字符串。它们在下标中采用切片表示法或切片对象:

# 下标通过在大括号中包含冒号来创建切片:
string[start:stop:step]

# 要在大括号外创建切片,您需要创建切片对
slice_obj = slice(start, stop, step)
string[slice_obj]

第三种方法:循环从字符串提取数据,然后进行字符串拼接(慢)

def reverse_a_string_slowly(a_string):
    new_string = ''
    index = len(a_string)
    while index:
        index -= 1                    # index = index - 1
        new_string += a_string[index] # new_string = new_string + character
    return new_string

第四种方法:循环从字符串提取数据,写入到一个空列表中,然后使用join进行字符串拼接(慢)

def reverse_a_string_more_slowly(a_string):
    new_strings = []
    index = len(a_string)
    while index:
        index -= 1                       
        new_strings.append(a_string[index])
    return ''.join(new_strings)

第五种方法:使用字符串拼接(慢)

def string_reverse(a_string):
    n = len(a_string)
    x=""
    for i in range(n-1,-1,-1):
        x += test[i]
    return x

第六种方法:使用reduce

reduce(lambda x,y : y+x, a_string)

第七种方法:使用递归(慢)

def rev_string(s): 
    if len(s) == 1:
        return s

    return s[-1] + rev_string(s[:-1])

第八种方法:使用list() 和reverser()配合

a_string='123456789'

def rev_string(a_string):
    l=list(a)
    l.reverse()
    return ''.join(l)

第九种方法:使用栈

def rev_string(a_string):
    l = list(a_string) #模拟全部入栈
    new_string = ""
    while len(l)>0:
        new_string += l.pop() #模拟出栈
    return new_string

参考文章:Reverse a string in Python

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126655.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gitlab注册收不到邮件_matlab收不到邮件

    gitlab注册收不到邮件_matlab收不到邮件gitlab安装在ubuntu系统上(腾讯云上),在/etc/gitlab/gitlab.rb配置发送邮件的邮箱。gitlab_rails[‘smtp_address’]=”smtp.163.com”gitlab_rails[‘smtp_port’]=25gitlab_rails[‘smtp_tls’]=false其他配置略。之前是可以发送邮件的。…

    2022年9月12日
    0
  • threadlocal底层实现_数据库底层实现原理

    threadlocal底层实现_数据库底层实现原理ThreadLocal作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂性。package com.mupack;public class App{ private String content; public void setContent(String content) { this.content = content; } public Stri

    2022年8月8日
    3
  • spring事务管理全解析

    spring事务管理全解析

    2021年5月9日
    94
  • 公用IPv6 IPv4 DNS[通俗易懂]

    IPv6下一代互联网国家工程中心ChinaIPv6DNS服务器雪人计划YetiDNSProject首选:240c::6666备用:240c::6644备用:240c::4444CNNICIPv6DNS服务器首选:2001:dc7:1000::1百度2400:da00::6666阿里云2400:3200::12400:3200:baba::1中科大2001:da8::666清华大学TUNADNS666101.6.6.6;2001:da8::666北京邮电

    2022年4月13日
    182
  • 所有alpha都想标记我_react native 游戏

    所有alpha都想标记我_react native 游戏从0.3.0到0.4.0,reactos花了十年。下一个版本据说就是beta了,这标志着reactos从此不再是个玩具了。无论如何,reactos终于变得可赏可玩了,react提供live和boot

    2022年8月1日
    3
  • 音频解码SBC_立体声音频编解码芯片

    音频解码SBC_立体声音频编解码芯片SBC音频编解码算法浅析1.SBC算法简介SBC是subbandcode的缩写,也可称为子带编码在A2DP协议中,SBC算法是默认支持的蓝牙SBC算法是一种以中等比特率传递高质量音频数据的低计算复杂度的音频编码算法1.1算法基本框图SBC系统使用一个余弦调制的滤波器组,用来解析和同步。滤波器组可设定成4或8个子带子带信号的量化采用比特分配器和自适应脉冲编码器组调制可用的比特位数

    2022年9月11日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号