鱼C论坛

 找回密码
 立即注册
查看: 1955|回复: 7

[已解决]关于19讲动动手第0题的reverse问题

[复制链接]
发表于 2020-11-17 09:20:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我又又又又遇到问题了


def huilianwen(string):
    list1 = list(string)
    list2 = list1[:]
    list3 = list1.reverse()
    if list2 == list3:
        return '是回联文'
    else:
        return '不是回联文'

print(huilianwen('上海自来水来自海上'))          
                                                                     结果为不是回联文          。
                                                                                  有懂的大哥可以帮忙分析一下吗                                
最佳答案
2020-11-17 09:25:51
本帖最后由 suchocolate 于 2020-11-17 09:29 编辑

list的reverse()不返回内容,而是直接改变原列表,所以list3什么也没有。
按下面写,不用倒转,直接判断。
def ckhw(strs):
    if strs == strs[::-1]:
        return '是回联文'
    else:
        return '不是回联文'

print(ckhw('上海自来水来自海上'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-17 09:25:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2020-11-17 09:29 编辑

list的reverse()不返回内容,而是直接改变原列表,所以list3什么也没有。
按下面写,不用倒转,直接判断。
def ckhw(strs):
    if strs == strs[::-1]:
        return '是回联文'
    else:
        return '不是回联文'

print(ckhw('上海自来水来自海上'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 09:34:14 | 显示全部楼层
suchocolate 发表于 2020-11-17 09:25
list的reverse()不返回内容,而是直接改变原列表,所以list3什么也没有。
按下面写,不用倒转,直接判断。 ...
def huilianwen(string):
    list1 = list(string)
    list2 = list1[:]
    
    if list2 == list1.reverse():
        return '是回连文'
    else:
        return '不是回连文'

print(huilianwen('上海自来水来自海上'))
     
                                                                        这样结果还是不是回连文

def huilianwen(string):
    list1 = list(string)
    list2 = list1[:]
    list1.reverse()
    if list2 == list1:
        return '是回连文'
    else:
        return '不是回连文'

print(huilianwen('上海自来水来自海上'))
  
但是这样就对了,为什么list2 == list1.reverse()这样还是不可以

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 09:45:23 | 显示全部楼层
hero533 发表于 2020-11-17 09:34
这样结果还是不是 ...

list的reverse()不返回内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 09:53:01 | 显示全部楼层
suchocolate 发表于 2020-11-17 09:45
list的reverse()不返回内容

好的,谢谢大哥,新知识get
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 10:02:12 | 显示全部楼层
hero533 发表于 2020-11-17 09:53
好的,谢谢大哥,新知识get

python自带的reversed()函数可以返回,但返回的是迭代器,不适合做回文判断,所以还是用[::-1]这种直接。
ls1 = [1, 2, 3, 4]
ls2 = reversed(ls1)
print(type(ls2))
print(ls2)
for i in ls2:
    print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 13:02:31 | 显示全部楼层
hero533 发表于 2020-11-17 09:34
这样结果还是不是 ...


Python 的列表绝大多数方法是在原列表上进行改变且没有返回值

例如reverse()、 extend()、append()、remove() 等没有返回值,但是 pop() 函数有返回值哈

当 Python 的函数或者方法没有返回值时候, Python 会默认返回一个None

所以这里  list1.reverse() 返回的是一个 None ,而 list2 =  list1.reverse() 即 list2 = None 条件永不成立
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 09:16:10 | 显示全部楼层
Twilight6 发表于 2020-11-17 13:02
Python 的列表绝大多数方法是在原列表上进行改变且没有返回值

例如reverse()、 extend()、append() ...

谢谢,记住了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 14:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表