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

断开一个字符串并反转它的每个元素

断开一个字符串并反转它的每个元素

噜噜哒 2022-10-18 16:50:10
我正在学习数据和算法,这是我遇到的问题问题:编写一个简短的递归 Python 函数,它接受一个字符串 s 并输出它的反向。例如,pots&pans 的反面是 snap&stop 。a="pots&pans"b=a.split("&")c=[]c=list(b)def reverse(data,leng,leng2,index,count):    rev=(leng-1)-count    if count<leng/2:        temp=data[index][count]        data[index][count]=data[index][rev]        data[index][rev]=temp    if index==leng2:        print(data[index-1]+"&"+data[index])    return reverse(data,leng,leng2,index+1,count)reverse(c,4,2,0,0)    我在这里遇到错误TypeError: 'str' object does not support item assignment我最初的想法是 str 是不可变的。所以最好将它存储在一个列表中并进行操作。但是,当我尝试将 str 分配给列表时遇到了一些问题。有什么解决办法吗?
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

尝试这个:


a="pots&pans"

b=a.split("&")


def reverse(word):


    if not word:

        return ""


    return reverse(word[1:]) + word[0]


result = reverse(b[1]) + "&" + reverse(b[0])


print(result)

如果您希望一次递归也反转所有单词的位置:


a="pots&pans&hello&hi"

b=a.split("&")


def reverse(lis):


    if not lis:

        return ""


    if type(lis) == list and len(lis) == 1:

        return reverse(lis[0])


    if type(lis) == str:

        return reverse(lis[1:]) + lis[0]


    if type(lis) == list:

        return reverse(lis[1:]) + "&" + reverse(lis[0])


print(reverse(b))


查看完整回答
反对 回复 2022-10-18
?
RISEBY

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

一种递归方法是将第一个字符附加到字符串其余部分的反面:


def rev(s): return rev(s[1:])+s[0] if s else ""

输出:


rev("pots&pans")


'snap&stop'

您也可以在不使用参数解包索引的情况下执行此操作:


def rev(first,*rest): return rev(*rest)+first if rest else first


rev(*"pots&pans")


'snap&stop'


查看完整回答
反对 回复 2022-10-18
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

尝试这个:


a="pots&pans"


def reverse(a_string):

    `letter_list = list(a_string)`

    `letter_list.reverse()`

    `return(''.join(letter_list))`


print(reverse(a))


查看完整回答
反对 回复 2022-10-18
  • 3 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

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