# [ 每一个元素/和元素相关的操作 for 元素 in 可迭代数据类型 ] # 变量之后挨个处理
# [ 满足条件的元素相关操作 for 元素 in 可迭代数据类型 if 元素相关的条件 ] # 筛选功能
# 完整的列表推导式-------------------- 占内存
# 30 以内 能够被 3 整除的
q = [i for i in range(30) if i %3 == 0]
print(q) # 打印结果:[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
# 30 以内 能够被3整除的数 的平方
q1 = [i*i for i in range(30) if i % 3 == 0]
print(q1) # 打印结果:[0, 9, 36, 81, 144, 225, 324, 441, 576, 729]s
# 进阶 -- 列表的嵌套 -- 找出 列表中 含有两个 q 的字符
names = [
['qweqwe','sdfsdf','qgaq'],
['qrwq','sdfgsdf','dfsg']
]
# 先 for 大列表 然后继续 for 小列表 ...
q2 = [name for lis in names for name in lis if name.count('q') == 2]
print(q2) # 打印结果:['qweqwe', 'qgaq', 'qrwq']
# 生成器表达式:------------------------- 不占内存
# 30 以内 能够被 3 整除的
q3 = (i for i in range(30) if i %3 == 0)
print(q3) # 打印结果:<generator object <genexpr> at 0x0000022FE39B8A40>
print(list(q3)) # 打印结果:[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
# 字典推导式:-------------------------
# 使 字典的 k 和 v 对调
dic = {'a':1,'b':2}
q4 = {dic[k]:k for k in dic}
print(q4) # 打印结果:{1: 'a', 2: 'b'}
'''
for i in dic:
print(i) # a b
print(dic[i])# 1 2
'''
# 合并大小写 对应的 value
dic1 = {'a':10,'b':21,'A':23,'D':2}
q5 = {k.lower():dic1.get(k.lower(),0) + dic1.get(k.upper(),0) for k in dic1}
print(q5) # 打印结果:{'a': 33, 'b': 21, 'd': 2}
# 集合推导式,自带 去重-------------------------
# 计算每一个值得平方
d = {x**2 for x in [1,-1,2,4]}
print(d) # 打印结果:{16, 1, 4}