# ### 集合推导式 """ 案例: 满足年龄在18到21,存款大于等于5000 小于等于5500的人, 开卡格式为:尊贵VIP卡老x(姓氏),否则开卡格式为:抠脚大汉卡老x(姓氏) 把开卡的种类统计出来 """ listvar = [ {"name":"王家辉","age":18,"money":10000}, {"name":"王水机","age":19,"money":5100}, {"name":"王鹏","age":20,"money":4800}, {"name":"李站","age":21,"money":2000}, {"name":"李小龙","age":180,"money":20} ] # res = {'a':1,"b":2,"c":3} # for i in res: # print(i) setvar = set() for i in listvar: if 18<=i['age']<=21 and 5000<=i['money'] <=5500: strvar = "尊贵VIP卡老" + i["name"][0] setvar.add(strvar) else: strvar = "抠脚大汉卡老" + i['name'][0] setvar.add(strvar) print(setvar) # 真值 if 条件表达式 else 假值 # 第一部分 for i in listvar # 第二部分 三目运算符:"尊贵VIP卡老" + i["name"][0] if 18 <= i['age']<=21 and 5000<=i['money']<=5500 else "抠脚大汉卡老" + i['name'][0] res = {"尊贵VIP卡老" + i["name"][0] if 18 <= i['age']<=21 and 5000<=i['money']<=5500 else "抠脚大汉卡老" + i['name'][0] for i in listvar} print(res) # ### 字典推导式 ''' ### (1)enumerate enumerate(iterable,[start=0]) 功能:枚举 ; 将索引号和iterable中的值,一个一个拿出来配对组成元组放入迭代器中 参数: iterable: 可迭代性数据 (常用:迭代器,容器类型数据,可迭代对象range) start: 可以选择开始的索引号(默认从0开始索引) 返回值:迭代器 ''' listvar = ["马军强","何键翰","郑国成","境泽年"] it = enumerate(listvar) from collections import Iterator,Iterable print(isinstance(it,Iterator)) # (1) 使用next进行调用 res = next(it) print(res) res = next(it) print(res) # (2) 使用for 来调用 for i in it: print(i) # (3) 用list瞬间得到所有数据 it = enumerate(listvar) lst = list(it) print(lst) #[(0, '马军强'), (1, '何键翰'), (2, '郑国成'), (3, '境泽年')] # 利用enumerate 变成字典推导式 res = {a:b for a,b in enumerate(listvar)} print(res) # 使用dict强转迭代器 res = dict(enumerate(listvar)) print(res) # start 可以选择从第几个数值开始数数 res = dict(enumerate(listvar,start=14)) print(res) ''' ### (2)zip zip(iterable, ... ...) 功能: 将多个iterable中的值,一个一个拿出来配对组成元组放入迭代器中 iterable: 可迭代性数据 (常用:迭代器,容器类型数据,可迭代对象range) 返回: 迭代器 ''' # (1)zip 自动配对,如果长度超出了,自动舍弃 lst1 = ["许经雄","刘五星","正路","易思"] lst2 = ["英俊潇洒","疯牛踢躺","柔情似水","抠脚大汉",1,2,3,4] it = zip(lst1,lst2) print(isinstance(it,Iterator)) # 使用for 搭配next 进行调用 for i in range(3): res = next(it) print(res) for i in it: print(i) # 利用zip实现字典推导式 res = {a:b for a,b in zip(lst1,lst2)} print(res) # 使用dict强转迭代器 res = dict(zip(lst1,lst2)) print(res) # (2)用两个列表 实现如下字典: # 'hxd':'黄熊大' # 'jzl':'将周郎' # 'cgt':'陈桂涛' dic1 = {'hxd':"胸大","jzl":"牛逼","cgt":"帅气"} dic2 = {0:"黄熊大",1:"将周郎",2:"陈桂涛"} lst_keys = dic1.keys() # print(lst_keys) # print(isinstance(lst_keys,Iterator)) # print(isinstance(lst_keys,Iterable)) lst_values = dic2.values() # print(lst_values) # print(isinstance(lst_values,Iterator)) # print(isinstance(lst_values,Iterable)) it = zip(lst_keys,lst_values) print(it) # 使用字典推导式实现 res = {a:b for a,b in it} print(res) # 使用dict强转迭代器实现 it = zip(lst_keys,lst_values) res = dict(it) print(res)