知行编程网知行编程网  2022-12-03 14:30 知行编程网 隐藏边栏  8 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于超详细的Python中与迭代相关的函数的相关知识,包括函数迭代例题,以及迭代公式这些编程知识,希望对大家有参考作用。

Python中超详细的迭代相关函数

下面要介绍的enumerate、range、zip、reversed、sorted都属于Python的内置函数或类,返回的对象可以通过迭代的方式访问。

一、enumerate函数

1.语法:enumerate(iterable, start=0)

1) 此函数在 Python 2.3 中可用。及以上版本。 2.6 增加start参数,返回一个枚举对象。枚举对象是一个迭代器。该函数将可迭代对象中的元素转化为枚举值,并为每个元素分配一个从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)如果第一个元素不满足终止值序列的约束条件,范围对象为空;

2)range对象支持索引访问,也支持负索引。当支持负索引时,会被解释为从正索引确定的序列的末尾开始索引,与序列访问方式相同;

3)range对象支持切片访问,但不同于索引访问方式。切片访问返回一个范围对象。假设:切片的起始位置索引为s,结束位置为e。当step为正数时,返回的范围对象为:

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(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)返回的对象可以转为list、dictionary等类型,但转为dictionary类型时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) 返回一个迭代器对象,其顺序与参数对象的顺序相反。原参数对象不变,返回的对象类型反转。它是一个不能直接访问的可迭代对象。可以转换为其他对象,也可以通过for循环方式访问

2)seq为任意序列或可迭代对象,必须是具有__reversed__()方法的对象或支持序列协议的对象(__getitem__()支持__len__()方法和从0方法开始的整型参数)

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中的item返回一个新的排序列表,返回值为排序后的列表,原参数iterable中的数据不会改变;

2)key 指定一个带有单个参数的函数,用于从iterable 的每个元素中提取用于比较的键(例如key=str.lower)。默认为无(直接比较元素)

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']

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享