python函数迭代器,python迭代算法举例

  python函数迭代器,python迭代算法举例

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

  一.枚举函数

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

  1)Python 2.3版或更高版本可用于此功能。在2.6中,添加了start参数来返回一个枚举对象,它是一个迭代器。该函数将iterable对象中的元素转换为枚举值,并为每个元素分配一个从start开始的索引值;

  2)参数iterable,表示序列等迭代对象;

  3)参数start表示指标值的起始值,默认为0;

  4)4)enumerate()返回的枚举对象通过next函数或__next__方法返回一个元组,其中包含索引值(从start开始,默认值为0)和迭代iterable得到的对应元素值。

  2.对于iterable)/遍历对象,enumerate可以形成一个索引序列,用来同时获取索引和值。此方法通常用在for循环中;

  3.注意它的返回值是一个迭代器,遍历后元素被清空。

  4.例如:

  1)s=enumerate(abc ,100)?

  l=列表?#l的值是:[(100, a ),(101, b ),(102, c)]

  2)对于index,stringinnumerate (ABC ,10) :print (index, 3360 ,string,,,end= )输出:

  0:a、113360b、123360c、II。距离函数

  1.语法:

  Range(start,stop[,step])1)返回值是Range类型的不可变数列iterable对象,通常用于在for循环中循环指定次数;

  2)参数start是可选参数,表示数列的起始值。可以省略,默认值为0;

  3)参数stop是必选参数,表示整数序列的结束值,生成序列的值必须小于该值。当只有一个参数调用range时,这个参数就是stop的值;

  4)参数step表示序列中两个元素之间的步长,即序列中两个相邻元素之间的差值。这是一个可选参数,默认为1;每个元素的值r[i]=?Start * i,step为正整数时生成的序列为升序,r[i] stop,step为负整数时生成的序列为降序,r[i] stop。

  解释

  1)如果第一个元素不满足序列上停止值的限制,则range对象为空;

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

  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)与常规的list或tuple相比,Range类型的优势在于一个range对象无论代表多大的范围,总是占用固定量(较小)的内存(因为它只保存start、stop和step的值,会根据需要计算特定项或子范围的值)。在某种程度上,它类似于生成器表达式。

  5)使用==and!=要检测range对象是否相等,请将它们作为一个序列进行比较。也就是说,如果两个range对象表示相同的值序列,则认为它们是相等的。(请注意,比较两个rang的结果相同。

  e 对象可能会具有不同的 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='; ') #输出为:

  

1Aa;2Bb;3Cc;
四、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 #输出:

  

<reversedobjectat0x000000000371B1D0>
五、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']

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: