首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

第4.3节 Python中与迭代相关的函数

  • 23-09-22 18:41
  • 2430
  • 7799
blog.csdn.net

下面要介绍的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)  #输出:
list(s2)   #输出:['D', 'c', 'b', 'A'],s保持不变
s2  #输出:


五、    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(http://iyenn.com/index/link?url=https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。 

欢迎大家批评指正,谢谢大家关注!

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基础语法函数333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/89888498"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top