鱼C论坛

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

可迭代对象都有哪些?

[复制链接]
发表于 2016-5-13 18:35:48 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 竟无语凝噎 于 2016-5-13 18:46 编辑

之前有大神说in后面只能接可迭代对象
那么可迭代对象都有哪些?
可迭代对象和迭代器的区别是什么
(百度上参差不齐,感觉不靠谱,特在此咨询)

最佳答案

查看完整内容

这个好像还真没有人总结(因为没必要) 因为 可不可迭代就能看出来的...没必要这样细, 如果是新人在学python的话 别太在意过多的细节。先过一遍(如果不回来复习 或者做笔记应用 很快会忘记) 可以用作循环 可以用迭代器去迭代的 都算迭代对象 如果你不知道什么是迭代的话......再去看小甲鱼视频吧 如果你非要一个判断是否是可迭代对象的方法的话 用help() 里面含有 __iter__()方法的 就是可迭代对象。 因为iter就是 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-13 18:35:49 | 显示全部楼层
这个好像还真没有人总结(因为没必要)   因为 可不可迭代就能看出来的...没必要这样细,
如果是新人在学python的话  别太在意过多的细节。先过一遍(如果不回来复习 或者做笔记应用 很快会忘记)
可以用作循环 可以用迭代器去迭代的 都算迭代对象
如果你不知道什么是迭代的话......再去看小甲鱼视频吧

如果你非要一个判断是否是可迭代对象的方法的话
用help()
里面含有 __iter__()方法的   就是可迭代对象。
因为iter就是个迭代器。


先往后学看看吧      加油  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-13 19:00:57 | 显示全部楼层
101℃太阳 发表于 2016-5-13 18:52
这个好像还真没有人总结(因为没必要)   因为 可不可迭代就能看出来的...没必要这样细,
如果是新人在学py ...

今天好像就是您回答的我的问题,十分感谢
但是有一点不理解for (i,j) in (f1.readline(),f2.readline()):
这种语句为什么不能执行?
f1.readline()和,f2.readline() 这辆个都是字符串,都是可迭代对象
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-13 20:17:37 | 显示全部楼层
  1. from collections import Iterable, Iterator
  2. isinstance([], Iterable)
  3. isinstance([], Iterator)
复制代码


可以判断一个对象是否可迭代,或者是否是迭代器
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-13 21:40:51 | 显示全部楼层
竟无语凝噎 发表于 2016-5-13 19:00
今天好像就是您回答的我的问题,十分感谢
但是有一点不理解for (i,j) in (f1.readline(),f2.readline()) ...

你这个语法就有问题啊,这种写法的时候,Python就会把 (f1.readline(),f2.readline())看成是一个tuple类型,
你可以使用type命令查看,所以这样的话,只是for循环两次,第一次就是把f1.readline()取出,第二次就把f2.readline()取出,这时in前面的参数必须和取出的个数一致,否则会报错
  1. ValueError: too many values to unpack
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-13 23:33:05 | 显示全部楼层
竟无语凝噎 发表于 2016-5-13 19:00
今天好像就是您回答的我的问题,十分感谢
但是有一点不理解for (i,j) in (f1.readline(),f2.readline()) ...


WylLy的回答已经解释了 但是好像并不能解释的报错的原因...
就如你之前问的
这个 for in 后面的必须也是一个可迭代的.
我明白你的意思,但是你的 in后面只是一个元组  是一个 不是一堆元组.
就只是f1的第一行和f2的第一行组成的元组。
目前来说解决你想法的 写法就是..  将一个个元组   自己组好放入到一个list里面
因为list是可迭代的。读完list[0]后面还有list[1][2][3]...
(首先你这样写肯定是假设在f1,  f2行数一样的情况下)
然后再去其他操作

你可以先 while(True)循环
(i,j) = (f1.readline() , f2.readline()
然后list.append() 即可,
切记循环中不要f1.close()  不然 读txt的指针会回到开头

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-14 08:57:20 | 显示全部楼层
101℃太阳 发表于 2016-5-13 23:33
WylLy的回答已经解释了 但是好像并不能解释的报错的原因...
就如你之前问的
这个 for in 后面的必须 ...

好的 十分感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-16 09:55:07 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-21 01:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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