python3 zip与zip(*)

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类对象

发布了13 篇原创文章 · 获赞 6 · 访问量 516

猜你喜欢

转载自blog.csdn.net/ljr_123/article/details/105032453