首页 > 其他分享 >迭代器

迭代器

时间:2024-03-02 18:33:59浏览次数:24  
标签:__ 迭代 res iter next print

迭代器

from collections.abc import Iterator,Iterable 3.8版本以上
迭代器是能被next()函数调用并不断返回下一个值的对象。迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续的。迭代器的特征是并不依赖索引,而通过next指针(内存地址寻址)迭代所有数据,一次只取一个值,而不是一股脑的把所有数据放进内存,大大节省空间。

可迭代对象

setvar = {"王同培","马春配","赵万里","赵沈阳"}
# 获取当前对象的内置成员
lst = dir(setvar)
print(lst)

# 判断是否是可迭代对象
res = "__iter__" in lst
print(res)

迭代器

for循环之所以可以遍历所有的数据,是因为底层使用了迭代器,通过地址寻址的方式,一个一个的找数据; 可迭代对象 -> 迭代器 实际上就是从不能够被next直接调用 -> 可以被next指针直接调用的过程。

如果是可迭代对象 -> 不一定是迭代器
如果是迭代器 -> 一定是可迭代对象

# 1.如何创建一个迭代器
setvar = {"王同培","马春配","赵万里","赵沈阳"}
#方法一
it = iter(setvar)
#方法二
it = setvar.__iter__()
print(it)

# 2.如何判断一个迭代器
print(dir(it))
res = "__iter__" in dir(it)  and "__next__" in dir(it)
print(res)

# 3.如何调用一个迭代器
"""next是单向不可逆的过程,一条路走到黑"""
res = next(it)
print(res)
res = next(it)
print(res)
res = next(it)
print(res)
res = next(it)
print(res)

# 4.重置迭代器
it = iter(setvar)
"""调用迭代器的魔术方法"""
print(  it.__next__()  )
print(  it.__next__()  )
print(  it.__next__()  )
print(  it.__next__()  )

# 5.调用迭代器的其他方法
# 1 for
it = iter(setvar)
for i  in  it:
	print(i)

# 2 for + next
it = iter(setvar)
for i in range(5):
	print( next(it) )


# 6.判断迭代器/可迭代对象的其他方法
# 从...模块 引入...内容
from collections import Iterator, Iterable
"""Iterator 迭代器 Iterable 可迭代的对象"""
res = isinstance(it,Iterator)
print(res)
res = isinstance(it,Iterable)
print(res)

# 7.range是迭代器么?
print(isinstance(range(10),Iterator)) # False
print(isinstance(range(10),Iterable)) # True

# 变成迭代器
it = range(10).__iter__()
print(isinstance(it,Iterator)) # True
print(isinstance(it,Iterable)) # True

标签:__,迭代,res,iter,next,print
From: https://www.cnblogs.com/wbcde116/p/18049033

相关文章

  • 迭代器模式
    简介迭代器模式是一种行为型设计模式,它用于提供一种顺序访问聚合对象(如列表、集合、数组等)中的元素,而不需要暴露该对象的内部表示。这种模式将迭代操作从聚合对象中分离出来,使得可以在不同的聚合对象上使用相同的迭代逻辑。在迭代器模式中,通常会有两个主要角色:迭代器(Iterator......
  • 算法入门:递归和迭代
    文章目录1.递归 1.1.概念1.2.案例1.3.优缺点2.迭代2.1.概念2.2.案例2.3.优缺点3.递归与迭代算法的关系和区别3.1.关系3.2.区别3.3.算法的选择 1.递归1.1.概念递归算法是一种解决问题的方法,其中问题被分解为更小、相似的子问题。这一方法通过不断调用自......
  • 产品更新|智能组卷持续迭代升级,提升招聘效率与精确度
    传统的笔试环节中,大家花在出题、组卷所花费的时间已经不可估量。经过一年累计20多次迭代,是时候重新介绍基于岗位画像智能组卷的能力了。 公共题库突破8000道“智能组卷”的背后,需要海量高质量题目。ShowMeBug题库专家团队非常努力,为了提升各类岗位的模型构建和题量需......
  • Lua学习笔记之迭代器、table、模块和包、元表和协程
    迭代器迭代器是一种对象,它能够来遍历标准库模板容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址,在Lua中迭代器是一种支持指针类型的结构,他可以遍历集合的每一个元素。泛型for迭代器泛型for自己内部保存迭代函数,实际上保存三个值:迭代函数、状态常量、控制变量。泛型......
  • Python中生成器和迭代器的概念及两者区别
    本文详细介绍Python中生成器和迭代器的概念及两者区别。并通过一个案例分析两者在实际应用中的性能差异。 生成器生成器是一种特殊类型的迭代器,它使用函数和yield关键字定义,可以像普通函数一样调用和执行。生成器在每次迭代时产生一个值,并在下一次迭代时恢复执行。 在......
  • 面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
    写在开头某大厂的面试现场,一位目光深邃,头顶稀疏的中年面试官坐在椅子上,这时候的我走了进来。面试官:“小伙子,学过Java中容器和数据结构了吧?”我:“嗯,学了”面试官:“ok,那你来聊一聊Java中的迭代器(Iterator),要说清楚他们的应用场景哈”我:“哦,好滴”内心独白:“这面试官不按套路......
  • 修改被迭代的集合
    在遍历过程中如果尝试修改正在被迭代的集合可能会抛出ConcurrentModificationException异常。因此,对于可变操作建议使用Iterator的remove()方法或者在StreamAPI中新建一个新的映射结构。通义千问挺好用的metricThresholdMap.setL7Threshold(metricThresholdMap.getL7Thr......
  • 力扣 递归 迭代 栈 广度 队列 之 226. 翻转二叉树
    给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。 示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]栈/** *Definitionforabinarytreenode. *publicclassTreeNode......
  • 力扣 145. 二叉树的后序遍历 递归 迭代
    递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodelef......
  • 力扣 144. 二叉树的前序遍历 递归 迭代
    递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodelef......