鱼C论坛

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

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

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

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

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

x
我又又又又遇到问题了



  1. def huilianwen(string):
  2.     list1 = list(string)
  3.     list2 = list1[:]
  4.     list3 = list1.reverse()
  5.     if list2 == list3:
  6.         return '是回联文'
  7.     else:
  8.         return '不是回联文'

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

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

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

使用道具 举报

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

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

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

使用道具 举报

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

  9. print(huilianwen('上海自来水来自海上'))
复制代码
      
                                                                        这样结果还是不是回连文


  1. def huilianwen(string):
  2.     list1 = list(string)
  3.     list2 = list1[:]
  4.     list1.reverse()
  5.     if list2 == list1:
  6.         return '是回连文'
  7.     else:
  8.         return '不是回连文'

  9. 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]这种直接。
  1. ls1 = [1, 2, 3, 4]
  2. ls2 = reversed(ls1)
  3. print(type(ls2))
  4. print(ls2)
  5. for i in ls2:
  6.     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, 2024-5-22 01:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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