zip函数
内置函数。zi()函数语法:
zip(*iterables)
参数是一个或多个可迭代列表。返回可迭代对象,python3中需要使用list转换为列表。
将每个可迭代对象中的对应元素打包成一个个元组。
如果可迭代对象长度 不同时,以最短的为准。
例子1:多个列表合并
a = [1,2,3]
b = [4,5,6]
c = [7,8,9,10,11]
d = ['张三','李四','王五','赵六']
print('zip(a,b): ',zip(a,b))
zipped = zip(a,b)
print('type(zipped): ',type(zipped))
print('list(zipped): ',list(zipped))
# 以长度短的为准
print('list(zip(a,c)): ',list(zip(a,c)))
zipped2 = zip(a,b,c)
print('list(zipped2): ',list(zipped2))
结果:
zip(a,b): <zip object at 0x0000012A1A73A240>
type(zipped): <class 'zip'>
list(zipped): [(1, 4), (2, 5), (3, 6)]
list(zip(a,c)): [(1, 7), (2, 8), (3, 9)]
list(zipped2): [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
例子2:字典的键和值分成两个元组
dict1 = {'张三':15,'李四':21,'王五':33}
key1,val1 = zip(*dict1.items())
print('key1: ',key1)
print('val1: ',val1)
结果:
key1: ('张三', '李四', '王五')
val1: (15, 21, 33)
例子3:同时迭代处理多个列表
a = [1,2,3]
b = [4,5,6]
res1 = [x+1 for x in a]
print('res1: ',res1)
# 如果一次迭代两个列表,下面会出错
# res2 = [x+y for x,y in a+b]
res3 = [x+y for x,y in zip(a,b)]
print('res3: ',res3)
结果:
[2, 3, 4]
[5, 7, 9]