python中的zip()函数和map()函数
一、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
<zip object at 0x103abc288>
>>> 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
>>> a
1
>>> b
2
>>> c
[3, 4, 5]
2.带*号的表达式获取序列中间部分
>>> a,*b,c = 1,2,3,4,5
>>> a
1
>>> b
[2, 3, 4]
>>> c
5
3.带*号的表达式获取序列前面部分
>>> *a,b,c = 1,2,3,4,5
>>> a
[1, 2, 3]
>>> b
4
>>> c
5
4.嵌套解包
>>> (a,b),(c,d) = (1,2),(3,4)
>>> a
1
>>> b
2
>>> c
3
>>> d
4
>>> 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
<map object at 0x000001EFFCC8E710>
>>> list(m)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
关于map()函数的实现细节可以参考文章:map()函数
python中的zip()函数和map()函数的更多相关文章
- python中使用zip函数出现<zip object at 0x02A9E418>
在Python中使用zip函数,出现<zip object at 0x02A9E418>错误的原因是,你是用的是python2点多的版本,python3.0对python做了改动 zip方 ...
- Python学习(七)——匿名函数、map函数、filter函数、reduce函数与其他内置函数
匿名函数 lambda x: x + 1 # lambda:定义匿名函数的关键字 # x:形参 # x+1:程序处理逻辑 fun = lambda x: x + 1 print(fun(5)) #6 ...
- 【python】dir(__builtins__)查看python中所用BIF(内置函数)
dir(__builtins__)查看python中所用BIF(内置函数)
- Python day10 global关键字、函数递归、匿名函数、map函数的用法详解
1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage' def littepage(): glob ...
- Python【day 14】sorted函数、filter函数和map函数的区别
sorted函数.filter函数和map函数的区别1.作用 前者用于排序, 中者用于筛选, 后者用于返回值(不是特定的筛选或者排序)2.写法 前者 sorted(iterable,key=自定义函数 ...
- Python-lambda函数,map函数,filter函数
lambda函数主要理解: lambda 参数:操作(参数). lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值.lambda语句构建的其实是一个函数对象 map函数: ma ...
- python中的zip、map、reduce 、lambda、filter函数的使用
飞机票 lambda函数 lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是 ...
- python中的zip、map、reduce 、lambda函数的使用。
lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...
- python中的 zip函数详解
python中zip()函数用法举例 定义:zip([iterable, ...]) zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple ...
随机推荐
- requests使用“proxy”代理访问接口
在requests中使用proxy代理访问 使用前先更新requests版本为支持socks的版本. 先pip安装对应库: >> pip install -U requests[so ...
- 物理dataguard 正常切换 脚色转换,switchover_status 状态改变
正常切换切换前: 主库:SQL> select DATABASE_ROLE from v$database;DATABASE_ROLE----------------PRIMARY SQL> ...
- git 版本库基础知识学习
什么是版本库?什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可 ...
- Vue(day3)
一.Vue中的ajax:vue-resource和axios vue-resource是Vue实现异步加载的官方库,即Vue中的ajax.在Vue2.js之后vue-resource将不再更新维护,所 ...
- Java数据结构和算法 - 堆
堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...
- 从壹开始前后端分离 [.netCore 填坑 ] 三十三║ ⅖ 种方法实现完美跨域
缘起 哈喽大家周四好,趁着大家在团建的时候花一个下午学点儿东西,也是督促大家学习哟,希望大家看到老张的文章,可以有一丢丢的学习动力.不过话说过来,该吃的团建还是要去的,不能学我呀 [ /(ㄒoㄒ)/~ ...
- 【重学计算机】计组D2章:数据表示
1.基本概念 真值:+0101,-0100:机器数: [x]原=0101 2.几种机器数 原码:x = -0101,[x]原 = 1101 反码:x = -0101,[x]反 = 1010 补码:x ...
- qml demo分析(clocks-时钟)
一.效果展示 效果如图1所示,时钟列表支持鼠标左右拖动,带有黑色背景的是晚上时钟,无黑色背景的是白天时钟 二.源码分析 1.main.cpp文件中只包含了一个宏,该宏的具体解释请看qml 示例中的关键 ...
- ASP.NET Core中使用GraphQL - 第二章 中间件
前文:ASP.NET Core中使用GraphQL - 第一章 Hello World 中间件 如果你熟悉ASP.NET Core的中间件,你可能会注意到之前的博客中我们已经使用了一个中间件, app ...
- 图解 HTTP 的缓存机制 | 实用 HTTP
题图:by @joewakeford 一.序 Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文头(Header),大多数 Http ...