python学习笔记--zip()和map()

来源:互联网 发布:php exec 返回值126 编辑:程序博客网 时间:2024/06/06 00:24

zip函数

zip([seq1,seq2,...])

zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中下标对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(3.x版本返回一个生成器)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以实现unzip(解压),示例:

lista=[1,2,3]listb=[2,5,7]listc=[4,5,6,7,8]zipab=zip(lista,listb)print(zipab) # <zip object at 0x032C1D50>print(list(zipab)) # [(1, 2), (2, 5), (3, 7)]zipac=zip(lista,listc)print(list(zipac)) # [(1, 4), (2, 5), (3, 6)]zipab=zip(lista,listb) # [(1, 2), (2, 5), (3, 7)]unzipab=zip(*zipab)print(unzipab) # <zip object at 0x02B81E40>print(list(unzipab)) # [(1, 2, 3), (2, 5, 7)]

map()

map(func,seq1[,seq2,...])

内置函数map()会将参数中除func之外的迭代器做类似于zip()的操作,即将每一个seq中相同下标的元素组合起来,并将该组合传递给func,其中元素组合的组数以seq中长度最短的序列为基准,这一步具体的操作参见上面的zip(),map()最终返回一个生成器。map()的常用操作如下:

当参数中除func外只有一个seq时,func会作用于该seq的每一个元素,并返回一个生成器:

lista=['hilary','miKE','verGiL','TOM','JeRRy']listb=['AAAAA','BBBB','CCCC','ddddd','fFfFf']caplist=map(str.capitalize,lista) # 字符串首字母大写print(caplist) # <map object at 0x03112790>print(list(caplist)) # ['Hilary', 'Mike', 'Vergil', 'Tom', 'Jerry']print(list(map(str.upper,listb))) # ['AAAAA', 'BBBB', 'CCCC', 'DDDDD', 'FFFFF']

当参数中除func外包含多个seq时,func接受若干seq的zip()组合,并返回一个生成器,此时需要注意func的参数个数与传入的seq每一个组合的元素个数的对应问题:

lista=[1,2,3]listb=[4,5,6]listc=[7,8,9,10]def testFunc(x,y,z):    return x*100+y*10+zdef testFunc2(para):    return para**2testRes=map(testFunc,lista,listb,listc)testRes2=map(testFunc2,listc)print(testRes) # <map object at 0x00682850>print(list(testRes)) # [147, 258, 369]print(testRes2) # <map object at 0x02C72930>print(list(testRes2)) # [49, 64, 81, 100]testRes3=map(testFunc2,listc,listb)print(list(testRes3)) # TypeError: testFunc2() takes 1 positional argument but 2 were given



原创粉丝点击