当前位置: 首页 > news >正文

Python最全迭代器有哪些?

python中迭代器的使用是最广泛的,凡是使用for语句,其本质都是迭代器的应用。

从代码角度看,迭代器是实现了迭代器协议的对象或类。迭代器协议方法主要是两个:

  1. __iter__()
  2. __next__()

__iter__()方法返回对象本身,他是for语句使用迭代器的要求。

__next__()方法用于返回容器中下一个元素或者数据。当容器中的数据用尽时,引发StopIteration异常。

任何一个类,只要实现了或者具有这两个方法,就可以称其为迭代器,也可以说是可迭代的。

内置迭代器工具

Python语言中,已经内建了一个用于产生迭代器的函数iter(),另外标准库的itertools模块中还有丰富的迭代器工具。

1.内建迭代器函数

内建的iter()函数有两种使用方法,原型如下:

iter(iterable)    参数iterable为可迭代类型

iter(callable,sentinel)  参数callable为可调用类型,参数sentinel称为‘哨兵’,即当第一个参数调用返回值等于第二个参数的值时,迭代或遍历停止。

2.itertools中常用的工具函数

itertools中提供了近二十种迭代器函数,主要分为三类

无限迭代器

count(start,[step])  # 从start开始,以step为步进行技术迭代

import itertools
for i in itertools.count(1,3):
    print(i)
    if i>=10:
        break
        
1
4
7
10

cycle(seq)  # 无线循环迭代seq

x=0
for i in itertools.cycle(['a','b']):
    print(i)
    x+=1
    if x>=6:
        break
        
a
b
a
b
a
b

repeat(elem,[n])  # 循环迭代elem

list(itertools.repeat(3,6))
[3, 3, 3, 3, 3, 3]

迭代短序列:

chain(p,q,...)     链接迭代,将p,q连接起来迭代,就像从一个序列中迭代

list(itertools.chain([1,2],[8,9]))
[1, 2, 8, 9]

compress(data,selectors)  依据selectors中的值选择迭代data序列中的值

list(itertools.compress([1,2,3,4,5,6,7,8,9,10],[1,'','2',None,{'a':3},{4},[],{},5,0]))
[1, 3, 5, 6, 9]

dropwhile(pred,seq)  当pred对序列元素处理结果为假时开始迭代seq后所有值

list(itertools.dropwhile(lambda x:x>6,[8,9,1,2,6,7]))
[1, 2, 6, 7]

filterfalse(pred,seq)  当pred处理为假的元素

list(itertools.filterfalse(lambda x:x>6,[8,9,1,2,6,7]))
[1, 2, 6]

takewhile(pred,seq)   与dropwhile相反

list(itertools.takewhile(lambda x:x>6,[8,9,1,2,6,7]))
[8, 9]

tee(it,n)   将it重复n次进行迭代

for its in itertools.tee([1,2,3],3):
    for i in its:
        print(i)
        
1
2
3
1
2
3
1
2
3

zip_longest(p,q,...) 

组合迭代器

product(p,q,...[,n])  迭代排列出所有的排列

list(itertools.product('abcd', '123'))
[('a', '1'), ('a', '2'), ('a', '3'), ('b', '1'), ('b', '2'), ('b', '3'), ('c', '1'), ('c', '2'), ('c', '3'), ('d', '1'), ('d', '2'), ('d', '3')]

permutations(p,r)   迭代序列中r个元素的排列

list(itertools.permutations('abcd', 2))
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'a'), ('b', 'c'), ('b', 'd'), ('c', 'a'), ('c', 'b'), ('c', 'd'), ('d', 'a'), ('d', 'b'), ('d', 'c')]

combinations(p,r)  迭代序列中r个元素的组合

list(itertools.combinations('abcd', 2))
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

相关文章:

Python最全迭代器有哪些?

python中迭代器的使用是最广泛的,凡是使用for语句,其本质都是迭代器的应用。 从代码角度看,迭代器是实现了迭代器协议的对象或类。迭代器协议方法主要是两个: __iter__()__next__() __iter__()方法返回对象本身,他是…...

ESP32 网络计时器,包含自动保存

简介 本代码是基于ESP32开发板实现的一个计时器功能,具备倒计时、计时器时长选择、显示当前时间、有源蜂鸣器报警等功能。代码中使用了WiFi网络连接、NTP时间同步、EEPROM存储等功能。通过按钮控制计时器的开始、停止和计时器时长的选择。 运行原理概述 在ESP32开…...

【ChatGPT】阿里版 ChatGPT 突然官宣意味着什么?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 阿里版 ChatGPT 突然官宣 ​ ChatGPT 技术在 AI 领域的重要性 自然语言生成 上下文连续性 多语言支持 ChatGPT 未来可能的应用场景 社交领域 商业领域 ​编辑 医疗领域…...

IPEmotion控制模块-PID循环应用

IPEmotion专业版、开发版支持控制模块,并且该模块支持函数发生器、PID控制器、路由器、序列控制和序列控制块以及参考曲线生成器。本文主要针对PID(P:Proportional control 比例控制;I:Integral control 积分控制&…...

【元分析研究方法】学习笔记2.检索文献(含100种学术文献搜索清单链接)

检索文献 该步骤的作用该步骤中需要注意的问题该步骤中部分知识点我的收获 参考来源:库珀 (Cooper, H. M. )., 李超平, & 张昱城. (2020). 元分析研究方法: A step-by step approach. 中国人民大学出版社. 该步骤的作用 1.识别相关文献的来源; 2.识别…...

题目:16版.自由落体

1、实验要求 本实验要求:模拟物体从10000米高空掉落后的反弹行为。 1-1. 创建工程并配置环境: 1-1.1. 限制1. 工程取名:SE_JAVA_EXP_E009。 1-1.2. 限制2. 创建包,取名:cn.campsg.java.experiment。 1-1.3. 限制3. 创建…...

视频可视化搭建项目,通过简单拖拽方式快速生产一个短视频

一、开源项目简介 《视搭》是一个视频可视化搭建项目。您可以通过简单的拖拽方式快速生产一个短视频,使用方式就像易企秀或百度 H5 等 h5 搭建工具一样的简单。目前行业内罕有关于视频可视化搭建的开源项目,《视搭》是一个相对比较完整的开源项目&#…...

network-1 4 layer internet model

4layer model applicationtransport tcp: transmission control protocol enable correct in-order delivery of data, running on top of the network layer service.udp: user datagram protocolnetwork packet:data、from、tonetwork->linkiplink source en…...

计算机网络笔记(横向)

该笔记也是我考研期间做的整理。一般网上的笔记是按照章节纪录的,我是按照知识点分类纪录的,大纲如下: 文章目录 1. 各报文1.1 各报文头部详解1.2 相关口诀 2. 各协议2.1 各应用层协议使用的传输层协议与端口2.2 各协议的过程2.2.1 数据链路层…...

0.redis-实践

1.redis内存设置多少,默认是0&#xff0c;不限制 2.如何配置&#xff0c;修改内存大小 1) 查看最大占用内存 # maxmeory <bytes> 或者 config get maxmemory 2) 默认内存多少可以用: 64位系统下不限制&#xff0c;32位下最多3G 3) 如何配置: 默认总内存的3/4 4) 如何修改…...

Redux的基本使用,从入门到入土

目录 一、初步使用Redux 1.安装Redux 2.配置状态机 二、Redux的核心概念 1.工作流程 2.工作流程 三、优化Redux 1.对action进行优化 2.type常量 3.reducer优化 四、react-redux使用 1.安装react-redux 2.全局注入store仓库 3.组件关联仓库 五、状态机的Hook 1.u…...

GDOUCTF2023-部分re复现

目录 [GDOUCTF 2023]Check_Your_Luck [GDOUCTF 2023]Tea [GDOUCTF 2023]doublegame [GDOUCTF 2023]Check_Your_Luck 打开题目是一串代码&#xff0c;明显的z3约束器求解 直接上脚本 import z3 from z3 import Reals z3.Solver() vReal(v) xReal(x) yReal(y) wReal(w) zRea…...

Java学习17(IO模型详解)

1、何为IO? I/O&#xff08;Input/Outpu&#xff09; 即输入&#xff0f;输出 。 从计算机结构的角度来解读一下 I/O。 根据冯.诺依曼结构&#xff0c;计算机结构分为 5 大部分&#xff1a;运算器、控制器、存储器、输入设备、输出设备。 输入设备&#xff08;比如键盘&am…...

Vue-全局过滤器以及进阶操作

前言 上篇文件讲述了&#xff0c;Vue全局过滤器的基本使用&#xff1a;Vue过滤器的基本使用 本篇将延续上文&#xff0c;讲述vue中过滤器的进阶操作 过滤器传参 如果有一天&#xff0c;多个地方使用过滤器&#xff0c;而且需要传递参数&#xff0c;那么可以这么写 多个过滤…...

财报解读:涅槃重生之后,新东方还想再造一个“文旅甄选”?

新东方逐渐走出了“微笑曲线”。 图源&#xff1a;新东方2023财年Q3财报 2023年4月19日&#xff0c;新东方披露了2023财年Q3财报&#xff08;截至2023年2月28日止&#xff09;&#xff0c;营收7.5亿美元&#xff0c;同比增长22.8%&#xff1b;归母净利润为8165万美元&#xff…...

华为OD机试 - 过滤组合字符串(Python)

题目描述 每个数字关联多个字母,关联关系如下: 0 关联 “a”,”b”,”c” 1 关联 “d”,”e”,”f” 2 关联 “g”,”h”,”i” 3 关联 “j”,”k”,”l” 4 关联 “m”,”n”,”o” 5 关联 “p”,”q”,”r” 6 关联 “s”,”t” 7 关联 “u”,”v” 8 关联 “w”,”x” 9 …...

maven简单使用

实验课的作业用一大堆框架/库&#xff0c;统统要用maven管理。 头一次用&#xff0c;真痛苦。 所幸得以解决&#xff0c;maven真香&#xff5e; 一步一步来。 1. maven 不是java人&#xff0c;只能说说粗浅的理解了。 简单来说&#xff0c;maven是一个管理项目的工具&…...

HTML学习笔记一

目录 HTML学习笔记 一、HTML标签 1、HTML语法规范 1.1标签的语法概述 1.2标签关系 2、HTML基本结构标签 2.1第一个HTML 2.2基本结构标签总结 3、开发工具 4、HTML常用标签 4.1标签的语义 4.2标题标签 4.3段落和换行标签 4.4文本格式化标签 4.5div和span标签 4.…...

人工智能十大流行算法,通俗易懂讲明白

人工智能是什么&#xff1f;很多人都知道&#xff0c;但大多又都说不清楚。 事实上&#xff0c;人工智能已经存在于我们生活中很久了。 比如我们常常用到的邮箱&#xff0c;其中垃圾邮件过滤就是依靠人工智能&#xff1b;比如每个智能手机都配备的指纹识别或人脸识别&#x…...

支持中英双语和多种插件的开源对话语言模型,160亿参数

一、开源项目简介 MOSS是一个支持中英双语和多种插件的开源对话语言模型&#xff0c;moss-moon系列模型具有160亿参数&#xff0c;在FP16精度下可在单张A100/A800或两张3090显卡运行&#xff0c;在INT4/8精度下可在单张3090显卡运行。MOSS基座语言模型在约七千亿中英文以及代码…...

SQL基础培训10-复杂查询原理

知识点: 1、SQL查询语句逻辑执行顺序 下面是一个查询语句的逻辑执行顺序(每段语句都标明了执行顺序号): 执行1:FROM 执行2:...

如何搭建信息存储中心?资源共享方案之搭建ftp个人服务器

serveru是一款由Rob Beckers开发的ftp服务器软件&#xff0c;全称为&#xff1a;serv-u ftp server&#xff0c;它功能强大又易于使用。ftp服务器用户通过ftp协议能在internet上共享文件。FTP协议是专门针对在两个系统之间传输大的文件开发出来的&#xff0c;它是TCP/IP协议的一…...

【LeetCode】188. 买卖股票的最佳时机 IV

188. 买卖股票的最佳时机 IV&#xff08;困难&#xff09; 思路 状态定义 一、首先确定要一天会有几种状态&#xff0c;不难想到有四种&#xff1a; a.当天买入了股票&#xff1b;b.当天卖出了股票&#xff1b;c.当天没有操作&#xff0c;但是之前是买入股票的状态&#xff…...

android studio RadioButton单选按钮

1.定义 <!--单选按钮--> <TextViewandroid:layout_marginTop"10dp"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"请选择你的性别&#xff1a;"> </TextView> <RadioGrou…...

AI大模型快速发展,我们该如何应对?

文章目录 提问问题范例Prompt 公式 如何准确提问 随着人工智能技术的不断发展&#xff0c;聊天型大语言模型工具如 ChatGPT 在解决各种实际问题时具有越来越广泛的应用。这一技术的快速发展&#xff0c;不仅带来了更高的工作效率和更高的精度&#xff0c;同时也改变了人类的工作…...

java多线程BlockingDeque的三种线程安全正确退出方法

本文介绍两种BlockingDeque在多线程任务处理时正确结束的方法 一般最开始简单的多线程处理任务过程 把总任务放入BlockingDeque创建多个线程&#xff0c;每个线程内逻辑时&#xff0c;判断BlockingDeque任务是否处理完&#xff0c;处理完退出&#xff0c;还有任务就BlockingDe…...

从STM32F407到AT32F407(一)

雅特力公司的MCU有着性能超群&#xff0c;价格优越的巨大优势&#xff0c;缺点是相关资料少一些&#xff0c;我们可以充分利用ST的现有资源来开发它。 我用雅特力的STM32F437开发板&#xff0c;使用原子 stm32f407的开发板自带程序&#xff0c;测试串口程序&#xff0c;原设定…...

【数据结构】顺序表和链表基本实现(含全代码)

文章目录 一、什么是线性表1. 什么是顺序表动态开辟空间和数组的问题解释LeetCode-exercise 2. 什么是链表2.1链表的分类2.2常用的链表结构及区别2.3无头单向非循环链表的实现2.4带头双向循环链表的实现2.5循序表和链表的区别LeetCode-exercise 3. 快慢指针LeetCode-exercise 一…...

CMake : Linux 搭建开发 - g++、gdb

目录 1、环境搭建 1.1 编译器 GCC&#xff0c;调试器 GDB 1.2 CMake 2、G 编译 2.1 编译过程 编译预处理 *.i 编译 *.s 汇编 *.o 链接 bin 2.2 G 参数 -g -O[n] -l、-L -I -Wall、-w -o -D -fpic 3、GDB 调试器 3.1 调试命令参数 4、CMake 4.1 含义 4.2…...

大数据实战 --- 美团外卖平台数据分析

目录 开发环境 数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup …...