zip()函数
开始学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)]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2020-03-23 JavaScript(7)--- 继承