19讲课后题 上海自来水来自海上的小问题
各位大神好:在课后作业答案中,小甲鱼给出的 回联文答案是:
'''def palindrome(string):
list1 = list(string)
list2 = reversed(list1)
if list1 == list(list2):
return '是回文联!'
else:
return '不是回文联!'
print(palindrome('上海自来水来自海上'))''''
我这里有个小疑问,就是if list1 == list(list2): 这一句为什么list1 == list(list2),而不是list1 == list2? 因为 reversed得到的是迭代器,需list转为列表 我们把代码分解,一条一条看
>>> string='上海自来水来自海上'
>>> list1=list(string)
>>> print(list1)
['上', '海', '自', '来', '水', '来', '自', '海', '上']
>>> list2=reversed(list1)
>>> print(list2)
<list_reverseiterator object at 0x0000000002F07888>
>>> list2=list(reversed(list1))
>>> print(list2)
['上', '海', '自', '来', '水', '来', '自', '海', '上']
reversed()是返回一个反向迭代器而非列表,这里我们需要将它列表化
Python 的 reversed() 函数返回的是一个反向迭代器
所以你直接 list2 =reversed(list1) 是将 list1 反向生成的迭代器赋值给了 list2
此时 list2 是一个反向迭代,则需要使用 list函数将迭代器转化为列表才可以进行 if 判断
否则 一个 列表元素 永远不会等于一个反向迭代器对象的,导致if条件永不成立 执行 else 的代码块
谢谢各位大神,明白了!! 由于只能选一个最佳答案,还请各位见谅!
页:
[1]