开始学python啦,第一篇章就以zip()内置函数,这个函数是看生成验证码的时候,竟然可以通过zip实现并行遍历,觉得很神奇,这个这种遍历方式,java还真没有。
python zip是一个非常有用的内建函数,它可以实现并行遍历,也可以将两个或多个列表,转换成一个元组或者字典。具体的通过示例来看下
案例一 将两个列表合成一个元组
ids = [1, 2, 3, 4]
names = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
persons = zip(ids, names)
print(list(persons))
运行结果
[(1, 'zhangsan'), (2, 'lisi'), (3, 'wangwu'), (4, 'zhaoliu')]
案例二 将两个列表合成一个字典
# 方式一 通过并行遍历实现
ids = [1, 2, 3, 4]
names = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
person_dict = {i:name for i,name in zip(ids,names)}
print(person_dict)
# 方式二 用dict函数将元组列表转换为字典
person_dict_2 = dict(zip(ids, names))
print(person_dict_2)
# {1: 'zhangsan', 2: 'lisi', 3: 'wangwu', 4: 'zhaoliu'}
# 追加
update_ids = [5,6]
update_names = ['tianqi','xiaoxiao']
person_dict_2.update(zip(update_ids,update_names))
print(person_dict_2)
# {1: 'zhangsan', 2: 'lisi', 3: 'wangwu', 4: 'zhaoliu', 5: 'tianqi', 6: 'xiaoxiao'}
案例三、两个集合长度不等,如何组成一个元组或者说字典
# 方式三
ids = [1, 2, 3, 4]
names = ['zhangsan', 'lisi']
persons = zip(ids, names)
print(list(persons))
# [(1, 'zhangsan'), (2, 'lisi')]
从上面输出来看,zip函数的结果基于最短的可迭代项,所以3,4丢弃了。那我想要保留呢
from itertools import zip_longest
ids = [1, 2, 3, 4]
names = ['zhangsan', 'lisi']
persons = zip_longest(ids, names)
print(list(persons))
# [(1, 'zhangsan'), (2, 'lisi'), (3, None), (4, None)]
# 如果想填充默认值呢
persons = zip_longest(ids, names, fillvalue='xxx')
print(list(persons))
# [(1, 'zhangsan'), (2, 'lisi'), (3, 'xxx'), (4, 'xxx')]
案例四、和案例一相反,将一个元组转换成两个列表
persons = [(1, 'zhangsan'), (2, 'lisi'), (3, 'wangwu'), (4, 'zhaoliu')]
ids, names = zip(*persons)
print(ids)
print(names)
运行结果
(1, 2, 3, 4)
('zhangsan', 'lisi', 'wangwu', 'zhaoliu')
在上面的示例中,星号
执行了拆包操作,即从记录列表中拆包所有四个元组
案例五、在for循环中使用zip函数
ids = [1, 2, 3, 4]
names = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
sexs = ['男', '男', '女', '女']
for id,name,sex in zip(ids,names,sexs):
print(f'id={id},名称={name},性别={sex}')
运行结果
id=1,名称=zhangsan,性别=男
id=2,名称=lisi,性别=男
id=3,名称=wangwu,性别=女
id=4,名称=zhaoliu,性别=女
再举一个例子: 同时遍历多个字典
dict_one = {'name': '小小', 'age': '8', 'sex': '女'}
dict_two = {'name': '西西', 'age': '8', 'sex': '男'}
for (k1, v1), (k2, v2) in zip(dict_one.items(), dict_two.items()):
print(k1, '->', v1)
print(k2, '->', v2)
运行结果
name -> 小小
name -> 西西
age -> 8
age -> 8
sex -> 女
sex -> 男
案例六、矩阵转置
matrix = [[1, 2, 3], [4, 5, 6]]
transposed = list(zip(*matrix))
print(transposed)
运行结果
[(1, 4), (2, 5), (3, 6)]
标签:函数,zip,ids,lisi,names,print,zhangsan
From: https://www.cnblogs.com/qdhxhz/p/18085701