zip 函数
1. 以多个可迭代对象作为参数,把对象中的元素打包成一个个元组
[1, 2], [3, 4] --> [1, 3], [2, 4]
2. 如果 可迭代对象长度不一致,以短为准
[1, 2], [3, 4, 5] --> [1, 3], [2, 4]
3. 利用 * 号操作符时,输入为 单个可迭代对象,作用是把 可迭代对象中各个元素进行解压,然后再打包
*['abc', [1, 2, 3]] --> ('a', 1), ('b', 2), ('c', 3)
注意 此时 可迭代对象中的 元素也必须 可迭代
4. 返回一个对象,可用 list() 转换为列表,这样可节省内存 【Python2 直接返回 list】
x = zip([1, 2], [3, 4]) print(x, type(x)) # <zip object at 0x0000000003129508> <class 'zip'> list(x) # 转换为列表
示例代码
##### 不带 *,参数为 多个可迭代对象 ### 长度一致 for j in zip([1, 2], [3, 4]): print(j) # (1, 3) # (2, 4) ### 长度不一致,以短为准 for j in zip([1, 2], [3, 4, 5]): print(j) # (1, 3) # (2, 4) ### 也可以是多个 list for j in zip([1, 2], [3, 4, 5], [7, 8]): print(j) # (1, 3, 7) # (2, 4, 8) ##### 带 *,参数为 单个可迭代对象 for i in zip(['flss', 'flsdfs', 'flpposfs']): # 不带 *,便于对比 print(i) # ('flss',) # ('flsdfs',) # ('flpposfs',) for i in zip(*['flss', 'flsdfs', 'flpposfs']): # 带 *,list print(i) # ('f', 'f', 'f') 本来是个 list,把每个元素拆开,对应位置合并,拆开操作理解为解压 # ('l', 'l', 'l') # ('s', 's', 'p') # ('s', 'd', 'p') for i in zip(*('flss', 'flsdfs', 'flpposfs')): # 带 *,tuple print(i) # ('f', 'f', 'f') # ('l', 'l', 'l') # ('s', 's', 'p') # ('s', 'd', 'p') ### 可迭代对象的元素必须可迭代 for i in zip(*('abc', [1, 2, 3])): # 可迭代对象中的元素必须可迭代 print(i) # ('a', 1) # ('b', 2) # ('c', 3) for i in zip(*[1, 2, 3]): # TypeError: zip argument #1 must support iteration 不可迭代报错 print(i)
参考资料:
https://www.runoob.com/python3/python3-func-zip.html Python3 zip() 函数