python中的可迭代对象

迭代是访问集合元素的式。迭代器是个可以记住遍历的位置的对象。迭代器对象从集合的第个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

1.    可迭代对象

我们已经知道可以对list、tuple、str等类型的数据使⽤for...in...的循环语法从

其中依次拿到数据进⾏使⽤,我们把这样的过程称为遍历,也叫迭代。

但是,是否所有的数据类型都可以放到for...in...的语句中,然后让for...in...

每次从中取出条数据供我们使,即供我们迭代吗?

>>>    for    i    in    100:...                    print(i) ...Traceback    (most    recent    call    last):File    "<stdin>",    line    1,    in    <module> TypeError:    'int'    object    is    not    iterable>>> #    int整型不是iterable,即int整型不是可以迭代的#    我们⾃定义⼀个容器MyList⽤来存放数据,可以通过add⽅法向其中添加数据>>>    class    MyList(object):...                    def    __init__(self):...                            self.container    =    []                def    add(self,    item):...                           self.container.append(item)>>>    mylist    =    MyList()>>>    mylist.add(1)>>>    mylist.add(2)>>>    mylist.add(3)

 

>>>    for    num    in    mylist:...                    print(num) ...Traceback    (most    recent    call    last):File    "<stdin>",    line    1,    in    <module>TypeError:    'MyList'    object    is    not    iterable>>> #    MyList容器的对象也是不能迭代的

我们⾃定义了⼀个容器类型MyList,在将⼀个存放了多个数据的MyList对象

放到for...in...的语句中,发现for...in...并不能从中依次取出⼀条数据返回给我

们,也就说我们随便封装了⼀个可以存放多条数据的类型却并不能被迭代使⽤。

我们把可以通过for...in...这类语句迭代读取⼀条数据供我使⽤的象称之可迭代对象(Iterable

两种方法:

1.可迭代对象.__iter__()

2.iter(可迭代对象)

2.    如何判断⼀个象是否可以迭代

可以使⽤    isinstance()    判断⼀个对象是否是    Iterable   对象:

In[50]:    from    collections    import    IterableIn[51]:    isinstance([],    Iterable) Out[51]:    TrueIn[52]:    isinstance({},    Iterable)Out[52]:    TrueIn[53]:    isinstance('abc',    Iterable)Out[53]:    TrueIn[54]:    isinstance(mylist,    Iterable)Out[54]:    FalseIn[55]:    isinstance(100,    Iterable)Out[55]:    False

 

 

3.    可迭代对象的本质

我们分析对可迭代对象进⾏迭代使⽤的过程,发现每迭代⼀次(即在for...in... 中每循环⼀次)都会返回对象中的下⼀条数据,⼀直向后读取数据直到迭代了所有数据后结束。那么,在这个过程中就应该有⼀个“⼈”去记录每次访问到了第⼏条数据,以便每次迭代都可以返回下⼀条数据。我们把这个能帮助

我们进⾏数据迭代的“⼈”称为迭代器(Iterator)

可迭代对象的本质就是可以向我们提供个这样的中间“⼈”即迭代器帮助我们对其进迭代遍历使

可迭代对象通过    __iter__    ⽅法向我们提供⼀个迭代器,我们在迭代⼀个可迭代对象的时候,实际上就是先获取该对象提供的⼀个迭代器,然后通过这个迭代器来依次读取对象中的每⼀个数据。那么也就是说,⼀个具备了    __iter__    ⽅法的对象,就是⼀个可迭代对象。

>>>    class    MyList(object):...                    def    __init__(self):...                             self.container    =    []                def    add(self,    item):...                              self.container.append(item)                   def    __iter__(self):...                                """返回⼀个迭代器"""...                                 #    我们暂时忽略如何构造⼀个迭代器对象...                                  pass>>>   mylist    =    MyList()>>>    from    collections    import    Iterable>>>   isinstance(mylist,    Iterable)True>>> 

#    这回测试发现添加了__iter__⽅法的mylist对象已经是⼀个可迭代象了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉排序树删除子节点以及遍历

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef int TElemType; int m,n; typedef struct BiTNode {//树节点的建立 TElemType data ;struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int SearchBST(BiTree T,int key,BiTree f,BiTr…

LeetCode 1548. The Most Similar Path in a Graph(动态规划)

文章目录1. 题目2. 解题1. 题目 We have n cities and m bi-directional roads where roads[i] [ai, bi] connects city ai with city bi. Each city has a name consisting of exactly 3 upper-case English letters given in the string array names. Starting at any city…

UAC执行批处理,进行提示

很简单&#xff0c;直接在批处理文件中前面加入下面这段 echo off:: BatchGotAdmin :------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system…

python中的iter()函数与next()函数

list、tuple等都是可迭代对象&#xff0c;我们可以通过iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使⽤next()函数来获取下⼀条数据。iter()函数实际上就是调⽤了可迭代对象的 __iter__ ⽅法。 >>> li [11, 22, …

vs.net打包生成可执行文件的方法

用vs.net对应用打包:1.打开VS.NET开发环境;2."文件"->"新建"->"项目";3."项目类型"选"安装和部署项目","模板"选"Web安装项目",然后填写"名称"和"位置",最后"确定"…

LeetCode 358. K 距离间隔重排字符串(贪心+优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个非空的字符串 s 和一个整数 k&#xff0c;你要将这个字符串中的字母进行重新排列&#xff0c;使得重排后的字符串中相同字母的位置间隔距离至少为 k。 所有输入的字符串都由小写字母组成&#xff0c;如果找不到距离至少为 k 的重排结果…

python中的迭代器Iterator

迭代器是⽤来帮助我们记录每次迭代访问到的位置&#xff0c;当我们对迭代器使⽤next()函数的时候&#xff0c;迭代器会向我们返回它所记录位置的下⼀个位置的数据。实际上&#xff0c;在使⽤next()函数的时候&#xff0c;调⽤的就是迭代器对象的 __next__ ⽅法&#xff08…

建立一颗二叉排序树,并删除该二叉排序树上的某个节点

设计并验证如下算法&#xff1a;而擦函数采用二叉链表结构表示&#xff0c;按输入的关键字序列建立一颗二叉排序树&#xff0c;并删除该二叉排序树上的某个节点。 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int TElemType; int m,n…

LeetCode 1153. 字符串转化(哈希)

文章目录1. 题目2. 解题1. 题目 给出两个长度相同的字符串&#xff0c;分别是 str1 和 str2。请你帮忙判断字符串 str1 能不能在 零次 或 多次 转化后变成字符串 str2。 每一次转化时&#xff0c;将会一次性将 str1 中出现的 所有 相同字母变成其他 任何 小写英文字母&#x…

使用数据库恢复专家,修复数据库

参考文章: http://www.cnblogs.com/arcer/admin/EditPosts.aspx?postid3118718&update1转载于:https://www.cnblogs.com/arcer/archive/2013/06/05/3118823.html

for循环利用可迭代对象与迭代器完成工作的本质

for循环工作本质 for item in Iterable 循环的本质就是先通过iter()函数获取可迭代对象Iterable 的迭代器&#xff0c;然后对获取到的迭代器不断调⽤next()⽅法来获取下⼀个值并将其 赋值给item&#xff0c;当遇到StopIteration的异常后循环结束。 li [100, 200, 300] #…

哈希表的构造和查找算法

实现哈希表的构造和查找算法&#xff0c;要求&#xff1a;用除留余数法构造哈希函数&#xff0c;分别用一次探测再散列、二次探测再散列解决冲突。 #include<stdio.h> #include<stdlib.h> #include<math.h> /*typedef struct {ElemType *elem;int count;int …

LeetCode 727. 最小窗口子序列(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给定字符串 S and T&#xff0c;找出 S 中最短的&#xff08;连续&#xff09;子串 W &#xff0c;使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符&#xff0c;返回空字符串 “”。 如果有不止一个最短长度的窗口&#x…

利用python自定义完整版迭代器

classMyList(object): """自定义的可迭代对象,迭代器 容器""" def __init__(self): self.container [] self.i 0 def add(self, item): """向对象中添加数据""" self.container.append(item) def __next__(self…

GHOSTXP_SP3电脑公司快速安装机版V2013

GHOSTXP_SP3电脑公司快速安装机版V2013下载地址&#xff1a;http://www.xiazaijidi.com/xp/dngs/1.html文件名称:GHOSTXP_SP3电脑公司特别版_V2012_05.iso文件大小:683.74MD5: 6182CC641025BA15AC43689E04ED5961SHA1: D5675FF901CBDCC27FDB9B5DD937DE145FEE8B33CRC32: C5B13EF2…

LeetCode 1035. 不相交的线(最长公共子序列DP)

文章目录1. 题目2. 解题1. 题目 我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。 现在&#xff0c;我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线&#xff0c;只要 A[i] B[j]&#xff0c;且我们绘制的直线不与任何其他连线&#xff08;非水平线&#xff0…

python中迭代器的应用场景

1.迭代器的应用场景 1). 如果数列的数据规模巨大 2). 数列有规律&#xff0c;但是依靠列表推导式描述不出来 2.数学中有个著名的斐波拉契数列&#xff08;Fibonacci&#xff09;&#xff0c;数列中第⼀个数0&#xff0c;第⼆个数1&#xff0c;其后的每⼀个数都可由前两个数相…

word粘贴至html特殊字符 粘贴后可能为乱码

可查找挑取其中有用的 常用字符  特殊字符大全&#xff08;完整版&#xff09; &#xfffd;6&#xfffd;2 &#xfffd;6&#xfffd;5 &#xfffd;6&#xfffd;4 &#xff1d; &#xfffd;6&#xfffd;6 &#xfffd;6&#xfffd;7 &#xff1c; &#xff1e; …

LeetCode MySQL 1549. The Most Recent Orders for Each Product

文章目录1. 题目2. 解题1. 题目 Table: Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | ------------------------ customer_id is the primary key for this table. T…

Select 可编辑 - 完美支持各大主流浏览器

最近做项目有个select可编辑的需求,一时棘手,网上找了很多解决方案都不完美,没办法自己写了一个,经测试IE,FF,chrome都支持。特此拿出来共享一下。 实现原理还是用select和input伪装成的,只不过是在样式处理上做了一些改进。 <!DOCTYPE html PUBLIC "-//W3C//Dth XHTML…