集合_ | 字典_ 推导式

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

  

猜你喜欢

转载自www.cnblogs.com/huangjiangyong/p/10907984.html