鱼C论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 176|回复: 10

[已解决]列表和经列表转换的迭代器的比较

[复制链接]
最佳答案
0 
发表于 2019-5-15 21:26:33 | 显示全部楼层 |阅读模式

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

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

x
string = '我爱爱我'
list1 = list(string)
list2 = reversed(list1)
list1与list(list2)为什么可以进行比较?(在IDLE中list(list2)解释为[](空列表))
为什么用list(reversed(list1))返回TypeError:'list' object is not callable?
最佳答案
2019-5-17 09:18:44
chenglong0135 发表于 2019-5-16 19:05
没有将list赋值啊,而且list(list2)在IDLE中返回的是空列表,用list1 == list(list2)返回True,不明白

>>> string = '我爱爱我'
>>> list1 = list(string)
>>> list2 = reversed(list1)
>>> list2
<list_reverseiterator object at 0x0303A450>  #list2是迭代器
>>> list1 == list(list2) #转换为列表,因为是回文,所以为TRue
True
>>> list(list2) #因为迭代器是惰性的,只能一次使用,再用时就为空了
[]
>>> list2 = reversed(list1)
>>> list(list2) #重新在做一次,这回是首次调用list2,所以有内容。
['我', '爱', '爱', '我']
>>>
>>> list = [1, 2]
>>> list(list2) #list只有被赋值时,才出现你的错误。
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    list(list2)
TypeError: 'list' object is not callable
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1224 
发表于 2019-5-15 21:33:24 | 显示全部楼层
请把你的操作代码上上来。问题描述清楚。


list1与list(list2)为什么可以进行比较? #是何意思? list1 是列表,list(list2)又是列表,为何不能进行比效?当然可以比效。你所谓的比效是== in ?还是什么?

list(reversed(list1)) # 这句只要list1是可迭代对象都没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
493 
发表于 2019-5-15 21:36:22 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-15 21:45 编辑
  1. string = '我爱爱我'
  2. list1 = list(string)
  3. list2 = list1[:]
  4. list2 . reverse()
复制代码

      汉字是双字节,恐怕用 reverse() 后比较两个列表会不灵,只有单字节字符才可以,如果一定要比较汉字,那么,reverse() 必须把每 2 个字节作为单字节(保持双字节的前后顺序汉字才不会变)进行处理才可以,这个函数得自己现写。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
235 
发表于 2019-5-15 21:38:27 | 显示全部楼层
1. 2个都是数组为什么不能比较?(虽然你根本没说是什么 比较)
2. list(list2) 并不为空,除非 list1 为空
3. list(reversed(list1)) 并不会返回这个 TypeError
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1223 
发表于 2019-5-16 10:18:11 | 显示全部楼层
string = '我爱爱我'
list1 = list(string)
list2 = reversed(list1)
list1与list(list2)为什么可以进行比较?(在IDLE中list(list2)解释为[](空列表))
---- reversed(list1)是一个迭代器,再list后成为列表,是与list1反序的列表。
为什么用list(reversed(list1))返回TypeError:'list' object is not callable?
---- 因为你前面将list赋值了,现在就把lis函数覆盖了,所以list()就出错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-5-16 19:01:28 | 显示全部楼层
ba21 发表于 2019-5-15 21:33
请把你的操作代码上上来。问题描述清楚。

list1 = ['我','爱','爱‘,'我’]
而list2在IDLE中返回的是空列表
但是却可以用list1 == list2进行比较
reversed(list1)是迭代器,但是list(reversed(list1))会报错,而list2=reversed(list1),list(list2)却不会报错?为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-5-16 19:02:27 | 显示全部楼层
°蓝鲤歌蓝 发表于 2019-5-15 21:38
1. 2个都是数组为什么不能比较?(虽然你根本没说是什么 比较)
2. list(list2) 并不为空,除非 list1 为 ...

我在IDLE中用list(reversed(list1))返回错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-5-16 19:05:42 | 显示全部楼层
冬雪雪冬 发表于 2019-5-16 10:18
string = '我爱爱我'
list1 = list(string)
list2 = reversed(list1)

没有将list赋值啊,而且list(list2)在IDLE中返回的是空列表,用list1 == list(list2)返回True,不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-5-16 19:06:39 | 显示全部楼层
jackz007 发表于 2019-5-15 21:36
汉字是双字节,恐怕用 reverse() 后比较两个列表会不灵,只有单字节字符才可以,如果一定要比较汉 ...

Pyhton不是用utf-8编码编写的么?按理说应该支持汉字啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1224 
发表于 2019-5-16 19:42:56 | 显示全部楼层
chenglong0135 发表于 2019-5-16 19:01
list1 = ['我','爱','爱‘,'我’]
而list2在IDLE中返回的是空列表
但是却可以用list1 == list2进行比较 ...

别费话,上你的调式代码。讲再多都是费话。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1223 
发表于 2019-5-17 09:18:44 | 显示全部楼层    本楼为最佳答案   
chenglong0135 发表于 2019-5-16 19:05
没有将list赋值啊,而且list(list2)在IDLE中返回的是空列表,用list1 == list(list2)返回True,不明白

>>> string = '我爱爱我'
>>> list1 = list(string)
>>> list2 = reversed(list1)
>>> list2
<list_reverseiterator object at 0x0303A450>  #list2是迭代器
>>> list1 == list(list2) #转换为列表,因为是回文,所以为TRue
True
>>> list(list2) #因为迭代器是惰性的,只能一次使用,再用时就为空了
[]
>>> list2 = reversed(list1)
>>> list(list2) #重新在做一次,这回是首次调用list2,所以有内容。
['我', '爱', '爱', '我']
>>>
>>> list = [1, 2]
>>> list(list2) #list只有被赋值时,才出现你的错误。
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    list(list2)
TypeError: 'list' object is not callable
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2019-8-26 15:47

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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