鱼C论坛

 找回密码
 立即注册
查看: 1252|回复: 1

[已解决]一个写回文联时遇到的问题

[复制链接]
发表于 2018-1-10 00:25:07 | 显示全部楼层 |阅读模式

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

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

x
  1. def func(string):
  2.     list1 = list(string)
  3.     print(list1)
  4.     list2 = list1.reverse()
  5.     print(list2)
  6.     if list1 == list2:
  7.         print('是回文')
  8.     else:
  9.         print('不是回文')

  10. func('上海自来水来自海上')
复制代码


为何输出是
['上', '海', '自', '来', '水', '来', '自', '海', '上']
None
不是回文

为何打印list2是None,而不是列表?

  1. def func(string):
  2.     list1 = list(string)
  3.     print(list1)
  4.     list2 = reversed(list1)
  5.     print(list2)
  6.     if list1 == list(list2):
  7.         print('是回文')
  8.     else:
  9.         print('不是回文')

  10. func('上海自来水来自海上')
复制代码


为什么只有这样的表达 打印list2时也不是列表,list(list2)这样才能打印出列表?

希望有人指点一下,谢谢
最佳答案
2018-1-10 01:32:24
因为reverse()是可变对象(字典、列表)的方法,无参数,无返回值,reverse()会改变可变对象,因此无需返回值。
reversed(seq)的返回值则是个逆置的迭代器,返回一个迭代器(迭代器的意思是只能通过循环来输出)。如:
a = '321'
b = reversed(a)
print(b)
>>> <reversed object at 0x02E2B090>
显示的是返回了一个迭代器
迭代器用循环输出
for i in b:
  print(i,end =' ')
也可以用list显示出来如:
>>> 1  2 3
>>> a = reversed(range(10)) # 传入range对象
>>> a # 类型变成迭代器
<range_iterator object at 0x035634E8>
>>> list(a)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

>>> a = ['a','b','c','d']
>>> a
['a', 'b', 'c', 'd']
>>> reversed(a) # 传入列表对象
<list_reverseiterator object at 0x031874D0>
>>> b = reversed(a)
>>> b # 类型变成迭代器
<list_reverseiterator object at 0x037C4EB0>
>>> list(b)
['d', 'c', 'b', 'a']

reverse没什么鸟用,对于字符串、列表、元组来说都可以用a[::-1]来取反.比如你的程序可以改成:
def func(string):
    list1 = list(string)
    print(list1)
    list2 = list1[::-1]
    print(list2)
    if list1 == list2:
        print('是回文')
    else:
        print('不是回文')

func('上海自来水来自海上')
多么的简单明了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-10 01:32:24 | 显示全部楼层    本楼为最佳答案   
因为reverse()是可变对象(字典、列表)的方法,无参数,无返回值,reverse()会改变可变对象,因此无需返回值。
reversed(seq)的返回值则是个逆置的迭代器,返回一个迭代器(迭代器的意思是只能通过循环来输出)。如:
a = '321'
b = reversed(a)
print(b)
>>> <reversed object at 0x02E2B090>
显示的是返回了一个迭代器
迭代器用循环输出
for i in b:
  print(i,end =' ')
也可以用list显示出来如:
>>> 1  2 3
>>> a = reversed(range(10)) # 传入range对象
>>> a # 类型变成迭代器
<range_iterator object at 0x035634E8>
>>> list(a)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

>>> a = ['a','b','c','d']
>>> a
['a', 'b', 'c', 'd']
>>> reversed(a) # 传入列表对象
<list_reverseiterator object at 0x031874D0>
>>> b = reversed(a)
>>> b # 类型变成迭代器
<list_reverseiterator object at 0x037C4EB0>
>>> list(b)
['d', 'c', 'b', 'a']

reverse没什么鸟用,对于字符串、列表、元组来说都可以用a[::-1]来取反.比如你的程序可以改成:
def func(string):
    list1 = list(string)
    print(list1)
    list2 = list1[::-1]
    print(list2)
    if list1 == list2:
        print('是回文')
    else:
        print('不是回文')

func('上海自来水来自海上')
多么的简单明了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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