博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中的zip()函数和map()函数
阅读量:6819 次
发布时间:2019-06-26

本文共 2347 字,大约阅读时间需要 7 分钟。

一、zip()函数

1.语法:

zip(iterable, ...)

参数说明:

iterable,...—— 一个或多个迭代器;
  • 在python2中:

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

  • 在python3中:

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。

我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

2.返回值:

  • python2直接返回一个元组列表
  • python3返回一个对象,可以用list(),tuple()把这个对象转成列表或者元组

3.用法:(python3环境)

>>>a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b)     # 返回一个对象>>> zipped
>>> list(zipped) # list() 转换为列表[(1, 4), (2, 5), (3, 6)]>>> list(zip(a,c)) # 元素个数与最短的列表一致[(1, 4), (2, 5), (3, 6)]>>> zipped = zip(a,b)>>> a1, a2 = zip(*ziped) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式>>> a1(1, 2, 3)>>> a2(4, 5, 6)>>>c = ('a','b','c')>>>d = (1,2,3)>>>aa = zip(c,d)>>>list(aa)[('a', 1), ('b', 2), ('c', 3)]

4.关于用’*‘解包

1.带*号的表达式获取序列剩余部分>>> a,b,*c = 1,2,3,4,5>>> a1>>> b2>>> c[3, 4, 5]2.带*号的表达式获取序列中间部分>>> a,*b,c = 1,2,3,4,5>>> a1>>> b[2, 3, 4]>>> c53.带*号的表达式获取序列前面部分>>> *a,b,c = 1,2,3,4,5>>> a[1, 2, 3]>>> b4>>> c54.嵌套解包>>> (a,b),(c,d) = (1,2),(3,4)>>> a1>>> b2>>> c3>>> d4>>> a,b(1, 2)>>> a,b,c,d(1, 2, 3, 4)

二、map()函数

1.语法:

map(func, iterable, ...)

map()会根据提供的函数对指定序列做映射。

第一个参数 func 是函数名字,它把函数 func 依次作用在后面每个 iterable 的每个元素上,然后并返回执行结果。

2.返回值:

  • python2中:返回一个新的列表。
  • python3中:返回一个迭代器

3.用法:(python3环境)

>>>def square(x) :            # 计算平方数...     return x ** 2... >>> m = map(square, [1,2,3,4,5])   # 计算列表各个元素的平方>>> list(m)[1, 4, 9, 16, 25]>>> m = map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数>>> list(m)[1, 4, 9, 16, 25] # 提供了两个列表,对相同位置的列表数据进行相加>>> m = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])>>> list(m)[3, 7, 11, 15, 19]

4.map()的特殊情况:函数是None

  • 在python2中:

如果函数是 None,自动假定一个‘identity’函数,这时候就是模仿 zip()函数,

>>>l=[1,2,3,4]>>>x=map(None,l)>>>print(x)[1,2,3,4]当有多个列表时,相同位置的元素归并到一个元组。如:>>> print map(None, [4,5,6],[3,2,1])[(4, 3), (5, 2), (6, 1)]列表长度不一致时,会用None补足,如:>>> print map(None, [4,5,6],[3,2,1,0])[(4, 3), (5, 2), (6, 1),(None,0)]
  • 在 python3中:

在 python3中,由于map()返回是一个迭代器,所以在这种情况下,map()返回的这个对象其实是不可调用的

>>> m = map(None,[1,2,3,4])>>> m>>> list(m)Traceback (most recent call last):  File "
", line 1, in
TypeError: 'NoneType' object is not callable

关于map()函数的实现细节可以参考文章:

转载于:https://www.cnblogs.com/ChangAn223/p/10729769.html

你可能感兴趣的文章
React-事件机制杂记
查看>>
调用链系列四:调用链上下文传递
查看>>
简单基于spring的redis配置(单机和集群模式)
查看>>
读《疯狂Java:突破程序员基本功的16课》之数组与内存控制部分总结
查看>>
LeetCode 315. Count of Smaller Numbers After Self
查看>>
CNCF多元化奖学金系列:让微服务、Kubernetes和云原生连接
查看>>
微信小程序:实现悬浮返回和分享按钮
查看>>
从dist到es:发一个NPM库,我蜕了一层皮
查看>>
JS module的导出和导入
查看>>
Python实现二叉树相关算法
查看>>
Linux中用户管理
查看>>
CSS实用技巧干货
查看>>
APT案例之点击事件
查看>>
分布式系统的Raft算法
查看>>
爱可生开源社区官网正式发布啦!
查看>>
猫头鹰的深夜翻译:微服务概述
查看>>
Python易学就会(二)import的用法
查看>>
俄罗斯方块游戏——pyqt5
查看>>
每日技术阅读记(2019.01.26)
查看>>
Hello CKB!
查看>>