python 内建函数(四)--迭代工具相关zip、enumerate
迭代工具函数
迭代工具函数的作用是生成一个个性化的可迭代对象
函数:
【1】zip(iter1[, iter2[, ...]])
返回一个zip对象。
这个zip对象的每一个元素是一个元组,可以迭代访问。每个对象中的元组个数由参数中长度最短的可迭代对象决定。
zip对象可用next()方法取值
In [75]: numbers = [10086, 10000, 10010, 9558]# 长度是 4 ...: names = ['中国移动', '中国电信', '中国联通'] # 长度是 5 ...: ...: for t in zip(numbers, names): ...: print(t) ...: for x, y in zip(numbers, names): ...: print(y, '的客服电话是:', x) ...: (10086, '中国移动') (10000, '中国电信') (10010, '中国联通') 中国移动 的客服电话是: 10086 中国电信 的客服电话是: 10000 中国联通 的客服电话是: 10010
In [87]: for t in zip(numbers): ...: print(t) ...: print("=============") ...: print(type(t)) ...: ...: (10086,) ============= <class 'tuple'> (10000,) ============= <class 'tuple'> (10010,) ============= <class 'tuple'> (9558,) ============= <class 'tuple'> In [88]: for t in zip(names): ...: print(t) ...: print("==============") ...: print(type(t)) ...: ...: ('中国移动',) ============== <class 'tuple'> ('中国电信',) ============== <class 'tuple'> ('中国联通',) ============== <class 'tuple'> In [89]:
In [61]: q Out[61]: '1234' In [62]: s Out[62]: 'weqert' In [63]: z=zip(s,q) In [64]: z Out[64]: <zip at 0x1d9a8683c48> In [65]: next(z) Out[65]: ('w', '1') In [66]: next(z) Out[66]: ('e', '2') In [67]: next(z) Out[67]: ('q', '3') In [68]: next(z,100) Out[68]: ('e', '4') In [69]: next(z,100) Out[69]: 100
自定义zip功能相同的函数
In [92]: def myzip(iter1, iter2): ...: it1 = iter(iter1) # 拿出一个迭代器 ...: it2 = iter(iter2) ...: while True: ...: a = next(it1) ...: b = next(it2) ...: yield (a, b) ...: for t in myzip(numbers, names): #能实现与zip同样的功能 ...: print(t) ...: (10086, '中国移动') (10000, '中国电信') (10010, '中国联通') --------------------------------------------------------------------------- StopIteration Traceback (most recent call last)
【2】enumerate(iterable,start=0)
参数:iterable,必选,可迭代对象。start,可选,默认为0,start必须为整数
作用:用可迭代对象iterable生成一个枚举对象。枚举,一一列举
返回值:返回一个enumerate对象(枚举对象)。
枚举对象的每一个元素是一个元组,由 start 和 iterable 的元素组成
In [55]: for t in enumerate(numbers,10): ...: print(t,"<===> 类型:%s"%type(t)) ...: (10, 10086) <===> 类型:<class 'tuple'> (11, 10000) <===> 类型:<class 'tuple'> (12, 10010) <===> 类型:<class 'tuple'> (13, 9558) <===> 类型:<class 'tuple'>
自定义enumerate功能的函数:
def myenum(iterable): it = iter(iterable) i = 0 while True: a = next(it) yield (i, a) i += 1