第4.3节 Python中与迭代相关的函数
下面要介绍的enumerate、range、zip、reversed、sorted属于Python内置的函数或者类别,返回的对象都可通过迭代方法访问。
一、 enumerate函数
1. 语法:enumerate(iterable, start=0)
1) 该函数Python 2.3. 以上版本可用,2.6 添加 start 参数,返回一个枚举对象,该枚举对象是一个迭代器,该函数将iterable对象中的元素转换成枚举值,并每个元素分配一个从start开始的索引值;
2) 参数iterable,表示一个可迭代对象如序列;
3) 参数start表示索引值的起始值,默认为0;
4) enumerate() 返回的枚举对象通过next函数或 __next__ 方法返回一个元组,里面包含索引值(从 start 开始,默认为 0)和通过迭代 iterable 获得的对应元素值。
2. 对于一个可迭代的(iterable)/可遍历的对象,enumerate可以将其组成一个索引序列,利用它可以同时获得索引和值,这种方式一般用在 for 循环当中;
3. 注意其返回值是一个迭代器,遍历访问后元素就清空了
4. 举例:
1) s=enumerate('abc',100)
l =list(s) #l的值为:[(100, 'a'), (101, 'b'), (102, 'c')]
2) for index, string in enumerate('ABC',10):print(index,':',string,', ',end='')
输出:10 : A , 11 : B , 12 : C ,
二、 range函数
1. 语法:range(start, stop[, step])
1) 返回值是一个不可变的数字序列可迭代对象,类型为range,该数字序列通常用于在 for 循环中循环指定的次数;
2) 参数start为可选参数,表示数字序列的起始值,可以省略,默认为0;
3) 参数stop为必选参数,表示整数序列的终止值,产生的序列的最大值必须小于该值,当range只带一个参数调用时,该参数就是stop的值;
4) 参数step表示序列两个元素间的步长,也就是序列中相邻两个元素的差值,可选参数,默认为1;每个元素的值r[i]= start + step*i ,当step为正整数时产生的序列是升序排序, r[i] < stop,当step为负整数时产生的序列是降序排序, r[i] >stop。
2. 说明
1) 如果第一个元素 不符合stop值对序列的限制条件,则该 range 对象为空;
2) range 对象支持索引访问,也支持负索引,支持负索引时会将其解读为从正索引所确定的序列的末尾开始索引,这个与序列访问方法一样;
3) range 对象支持切片访问,但与索引访问方式不一样,切片访问返回的还是一个range对象,假设:切片的开始位置索引为s,结束位置为e,当step为正数时则返回的range对象为:
range(start+s*step,max(stop,start+e*step),step)
如果step为负数,则返回的range对象为:range(start+s*step,min(stop,start+e*step),step)
4) range 类型相比常规 list 或 tuple 的优势在于一个 range 对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了 start, stop 和 step 值,并会根据需要计算具体单项或子范围的值),某种程度上与生成器表达式类似,但它不属于生成器,也不是迭代器。
5) 使用 == 和 != 检测 range 对象是否相等是将其作为序列来比较。 也就是说,如果两个 range 对象表示相同的值序列就认为它们是相等的。 (请注意比较结果相等的两个 range 对象可能会具有不同的 start, stop 和 step 属性,例如 range(0) == range(2, 1, 3) 而 range(0, 3, 2) == range(0, 4, 2)。)
6) 注意:在Python3以前有个xrange函数,Python3以后取消了,其功能合并到了range
三、 zip函数
1. 语法:zip(*iterables)
1) 参数说明:iterables表示多个可迭代对象,可以没有;
2) 返回值为一个zip对象,这个对象也是一个迭代器,该迭代器中的元素是元组,元组的元素i按参数顺序来自于这多个可迭代对象的第i个元素。当所输入可迭代参数对象中最短的一个被耗尽时,迭代器将停止迭代。 当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。 不带参数时,它将返回一个空迭代器。
2. 说明:
1) 返回对象可以转换为列表、字典等类型,但转换为字典类型时,zip必须且只能有2个迭代对象作为参数;
2) zip对象是个迭代器,因此遍历一次后元素会清空;
3) 要查看其内容,可使用list或dict将其转换为列表
3. 举例:按顺序执行下列脚本
numbers=[1,2,3,4,5,6]
ABC=['A','B','C']
abc='abc'
z=zip(numbers,ABC,abc)
list(z) #输出为:[(1, 'A', 'a'), (2, 'B', 'b'), (3, 'C', 'c')]
z=zip(numbers,ABC,abc) #思考一下,为什么要再次zip?
dict(z) #执行报错,因为使用了3个迭代对象不能创建字典数据
list(z) #输出为:[(2, 'B', 'b'), (3, 'C', 'c')],思考一下为什么比上面少了一个?
z=zip(numbers,ABC,abc)
for n,A,a in z:print(n,A,a,end='; ') #输出为:1 A a; 2 B b; 3 C c;
四、 reversed函数
1. 语法:reversed(seq)
2. 说明:
1) 返回一个与参数对象顺序倒转的 iterator对象,原参数对象保持不变,返回对象类型为reversed,是一个可迭代对象,不能直接访问,可以转换为其他对象或通过for循环方法访问
2) seq 为任何序列或可迭代的对象,必须是一个具有 __reversed__() 方法的对象或者是支持序列协议的对象(支持__len__() 方法和 从0开始的整数类型参数的__getitem__() 方法)
3. 举例:
s="AbcD"
s2=reversed(s)
type(s2) #输出:<class 'reversed'>
list(s2) #输出:['D', 'c', 'b', 'A'],s保持不变
s2 #输出:<reversed object at 0x000000000371B1D0>
五、 sorted函数
1. 语法:sorted(iterable, *, key=None, reverse=False)
2. 说明:
1) 根据 iterable 中的项返回一个新的已排序列表,返回值为已排序的列表,原参数iterable 中的数据不会发生变化;
2) key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。 默认值为 None (直接比较元素)
3) reverse 为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序
3. 举例
s="AbcD"
s1=sorted(s) #s1的数据为:['A', 'D', 'b', 'c']
s2=sorted(s,key=str.lower) #s2的数据为:['A', 'b', 'c', 'D']
本节介绍了几个常用函数,这些函数都与迭代处理相关,掌握这几个函数有助于理解后面章节的内容。
老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!
第4.3节 Python中与迭代相关的函数的更多相关文章
- 第11.24节 Python 中re模块的其他函数
一. re.compile函数 正则表达式编译函数,在后面章节专门介绍. 二. re.escape(pattern) re.escape是一个工具函数,用于对字符串pattern中所有可能被视为正则表 ...
- Python中的"缝合器"zip函数:将多个可迭代对象组合成一个迭代器
zip函数将参数中多个可迭代对象中相同序号的元素取出组合成一个元组作为输出列表的一个同样序号的元素,即输出列表的每个元素是一个元组,该元组的元素来源于参数中每个迭代对象的对应序号的元素. 具体可参考: ...
- Python中可迭代对象是什么?
Python中可迭代对象(Iterable)并不是指某种具体的数据类型,它是指存储了元素的一个容器对象,且容器中的元素可以通过__iter__( )方法或__getitem__( )方法访问. __i ...
- Python中的迭代是什么意思?
Python中的迭代是指通过重复执行的代码处理相似的数据集的过程,并且本次迭代的处理数据要依赖上一次的结果继续往下做,上一次产生的结果为下一次产生结果的初始状态,如果中途有任何停顿,都不能算是迭代. ...
- 第14.11节 Python中使用BeautifulSoup解析http报文:使用查找方法快速定位内容
一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>介绍了BeautifulSoup对象的主要属性,通过这些属性可以访 ...
- 第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问
一. 引言 在<第14.8节 Python中使用BeautifulSoup加载HTML报文>中介绍使用BeautifulSoup的安装.导入和创建对象的过程,本节介绍导入后利用Beauti ...
- 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类
第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...
- 第7.15节 Python中classmethod定义的类方法详解
第7.15节 Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一. 类方法的定义 在类中定 ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
随机推荐
- js 元素添加多个监听
function addListener(element,e,fn){ if(element.addEventListener){ element.addEventListen ...
- linux下的终端利器----tmux
转:tmux 是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件.类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远 ...
- C++动态存储方式与静态存储方式
如果从变量值存在的时间(即生存期)来分,可将程序中的变量分为:动态存储方式和静态存储方式.它们所占用的存储空间区域不同. C++存储空间区域 代码区:存放可执行程序的程序代码.静态存储区:存放静态变量 ...
- C# Span 源码解读和应用实践
一:背景 1. 讲故事 这两天工作上太忙没有及时持续的文章产出,和大家说声抱歉,前几天群里一个朋友在问什么时候可以产出 Span 的下一篇,哈哈,这就来啦!读过上一篇的朋友应该都知道 Span 统一了 ...
- 使用邮箱验证登录后台ssh,再也不怕被人攻击服务器了!
目录 前言 安装教程 前言 之前写过使用用户名密码,以及扫描二维码方式验证后台登录ssh的文章:[点击跳转]. 但是这样还是不太保险,也存在被人利用的情况,因为别人破解你的后台你压根不知道.因此想到使 ...
- pandas_01
# Pandas 知识点总结 # Pandas数据结构:Series 和 DataFrame import pandas as pd import numpy as np # 一,Series: # ...
- 阅源-jdk8-FunctionalInterface注解
package java.lang; import java.lang.annotation.*; /** * An informative annotation type used to indic ...
- high Performance
目的 找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈): 提供性能优化的方案(升级硬件?改进系统系统结构?): 达到合理的硬件和软件配置: 使系统资源使用达到最大的平衡. CPU过渡使用会造成大量进程等待C ...
- 1、线性DP 354. 俄罗斯套娃信封问题
354. 俄罗斯套娃信封问题 https://leetcode-cn.com/problems/russian-doll-envelopes/ 算法分析 首先我们从两种情况来讨论这个问题: w无重复值 ...
- shell编程之awk
awk是一种用于处理数据和生成报告的编程语言 awk可以在命令行中进行一些简单的操作,也可以被写成脚本来处理较大的应用问题 awk与grep.sed结合使用,将使shell编程更加容易 awk工作模式 ...