python中的zip()函数和map()函数

枫铃3年前 (2021-09-30)Python285

一、zip()函数

1.语法:

zip(iterable, ...)

参数说明:

  • iterable,…—— 一个或多个迭代器;

在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.关于用*解包

  • 带*号的表达式获取序列剩余部分
'''
Python学习交流群:579817333寻找有志同道合的小伙伴,互帮互助
群里还有不错的视频学习教程和PDF电子书!
'''
>>> a,b,*c = 1,2,3,4,5
>>> a
1
>>> b
2
>>> c
[3, 4, 5]
  • 带*号的表达式获取序列中间部分
>>> a,*b,c = 1,2,3,4,5
>>> a
1
>>> b
[2, 3, 4]
>>> c
5
  • 带*号的表达式获取序列前面部分
>>> *a,b,c = 1,2,3,4,5
>>> a
[1, 2, 3]
>>> b
4
>>> c
5
  • 嵌套解包
'''
Python学习交流群:579817333寻找有志同道合的小伙伴,互帮互助
群里还有不错的视频学习教程和PDF电子书!
'''
>>> (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环境)

'''
Python学习交流群:579817333寻找有志同道合的小伙伴,互帮互助
群里还有不错的视频学习教程和PDF电子书!
'''
>>>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

在 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

相关文章

Python拼接字符串的7种方法总结

前言 忘了在哪看到一位编程大牛调侃,他说程序员每天就做两件事,其中之一就是处理字符串。相信不少同学会有同感。 在Python中...

Python有哪些好用的语言翻译方法

Python有哪些好用的语言翻译方法

最近有个需求,要将几万条数据从日语翻译成中文。因为数据的获取和处理用的是python代码,所以想先尝试翻译部分也用python实现...

Python函数名的第一类对象及使用

函数名的第一类对象只是一...

python字典的增,删,改,查

字典—dict 1.字典是无序,可变的数据类型 2.字典:用于存储数据,存储大量数据,字典要比列表快,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。