zip(): 它的参数为多个可迭代对象,作用是聚合每个可迭代对象中的元素。
返回多个元组组成的迭代器,其中第i个元组由每个参数中的第i个元素组成。当最短的可迭代对象中的元素取完时,迭代停止。
当参数为单个可迭代对象时,它将返回多个由1元元组组成的迭代器。没有参数时,它将返回一个空的迭代器。
1、查看 zip() 返回结果的类型:
In[77]: print(type(zip({'A': 1, '1': a}, ('1', '5'), '34', '567')))
<class 'zip'>
2、获取 zip() 中的内容:
1) 方式一,for 循环:
"""参数为单个可迭代对象"""
In[78]: for i in zip(('A23', '51', '!@', "ajk")):
...: print(i)
...:
('A23',)
('51',)
('!@',)
('ajk',)
"""参数为多个可迭代对象"""
In[79]: for i in zip({'A': 1, '1': a}, ('1', '5'), '34', '567'): # 各对象长度分别为:2,2,2,3,返回结果的长度则为2
...: print(i)
...:
('A', '1', '3', '5')
('1', '5', '4', '6')
2) 方式二,使用 list() 将结果转换成列表输出:
In[81]: list(zip({'A': 1, '1': a}, ('1', '5'), '34', '567'))
Out[81]: [('A', '1', '3', '5'), ('1', '5', '4', '6')]
zip(*): 参数是一个由多个可迭代对象组成的对象,作用是对内嵌对象的元素进行拆解再组合,返回多个元组组成的迭代器。
1、查看 zip(*) 返回结果的类型:
In[82]: print(type(zip(*[{'A': 1, '1': a}, ('1', '5'), '34', '567'])))
<class 'zip'>
2、获取 zip(*) 中的内容:(同上,也有循环和list函数两种方法)
"""参数为单个可迭代对象"""
In[83]: for i in zip(*'A23'):
...: print(i)
...:
('A', '2', '3')
"""参数为多个可迭代对象"""
In[84]: for i in zip(*('A', 5, '2319', "a")): # 参数不能是不可迭代对象
...: print(i)
...:
Traceback (most recent call last):
File "C:\Users\liujieru\AppData\Local\Programs\Python\Python38\lib\site-packages\IPython\core\interactiveshell.py", line 3319, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-92-086e3212a672>", line 1, in <module>
for i in zip(*('A', 5, '2319', "a")):
TypeError: 'int' object is not iterable
In[85]: for i in zip(*('A', '5', '!', "a")): # 多个可迭代对象组成的元组
...: print(i)
...:
('A', '5', '!', 'a')
In[86]: for i in zip(*('A23', '51', '!@!', "ajk")): # 多个可迭代对象组成的元组
...: print(i)
...:
('A', '5', '!', 'a')
('2', '1', '@', 'j')
In[87]: for i in zip(*({'A': 1, '1': a}, ('1', '5'), '34', '567')): #多个可迭代对象组成的元组
...: print(i)
...:
('A', '1', '3', '5')
('1', '5', '4', '6')
In[88]: for i in zip(*[{'A': 1, '1': a}, ('1', '5'), '34', '567']): #多个可迭代对象组成的列表
...: print(i)
...:
('A', '1', '3', '5')
('1', '5', '4', '6')
In[89]: for i in zip(*{{'A': 1, '1': a}, ('1', '5'), '34', '567'}): #多个可迭代对象组成的集合
...: print(i)
...:
Traceback (most recent call last):
File "C:\Users\liujieru\AppData\Local\Programs\Python\Python38\lib\site-packages\IPython\core\interactiveshell.py", line 3319, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-86-bb736cc2c07a>", line 1, in <module>
for i in zip(*{{'A': 1, '1': a}, ('1', '5'), '34', '567'}):
TypeError: unhashable type: 'dict'
总结:
zip(),将多个对象中的元素,对应打包成由多个元组组成的zip类对象
zip(*),将一个对象里的多个内嵌对象,拆包再对应组合成由多个元组组成的zip类对象