zoukankan      html  css  js  c++  java
  • 集合_ | 字典_ 推导式

    # ### 集合推导式
    """
    案例:
    	满足年龄在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)
    

      

  • 相关阅读:
    linux包之coreutils之du和df命令
    java实现第六届蓝桥杯加法变乘法
    java实现第六届蓝桥杯奇妙的数字
    java实现第六届蓝桥杯奇妙的数字
    java实现第六届蓝桥杯打印大X
    java实现第六届蓝桥杯移动距离
    java实现第六届蓝桥杯移动距离
    java实现第六届蓝桥杯循环节长度
    java实现第六届蓝桥杯奇妙的数字
    java实现第六届蓝桥杯格子中输出
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10907984.html
Copyright © 2011-2022 走看看