#4.推导式 有叫生成式的
#推导式有 : 列表推导式/字典推导式/集合推导式
#字符出和元组没有推导式
#4.1 列表推导式
#作用 : 用一个表达式创建一个有规律的列表或控制一个有规律的列表。列表推导式又叫列表生成式
#while循环创建有规律的列表
list1 = []
i = 0
while i < 10:
list1.append(i)
i += 1
print(list1)
#for 循环创建有规律的列表
list2 = []
for i in range(10):
list2.append(i)
print(list2)
#列表推导式创建有规律的列表
list3 = [i for i in range(10)] #一行代码即可,极大的简化了代码量
print(list3)
#带 if 的列表推导式
#需求,创建一个0到10 的列表,步长为2
list4 = [i for i in range(0, 10, 2)] #不带 if 的列表推导式
print(list4)
list5 = [i for i in range(10) if i % 2 == 0]
print(list5)
#多个for 循环实现列表推导式
#先不用列表推导式实现
list6 = []
for i in range(1, 3):
for j in range(0, 3):
list6.append((i, j))
print(list6) #输出 [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
#用列表推导式
list7 = [(i, j) for i in range(1, 3) for j in range(0, 3)]
print(list7) #输出 [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
#4.2字典推导式
#快速合并列表为字典,或者提取字典中的目标数据
#
dict1 = {i:i**2 for i in range(1,5)}
print(dict1)
l1 = ['name', 'age', 'gender']
l2 = ['Jack', 20, 'Man']
dict1 = {ll1: ll2 for ll1 in l1 for ll2 in l2}
dict2 = {l1[i]:l2[i] for i in range(len(l1))}
print(dict1) #输出 {'name': 'Man', 'age': 'Man', 'gender': 'Man'}
print(dict2) #输出 {'name': 'Jack', 'age': 20, 'gender': 'Man'}
l1 = ['name', 'age', 'gender']
l2 = ['Jack', 20, 'Man', 'China']
#dict3 = {l1[i]:l2[i] for i in range(len(l2))} #报错 IndexError: list index out of range
l1 = ['name', 'age', 'gender', 'Country']
l2 = ['Jack', 20, 'Man']
#dict3 = {l1[i]:l2[i] for i in range(len(l1))} #报错 IndexError: list index out of range
#提取字典中的目标数据 比如提取分数大于多少的,或则年龄大于多少的,或者工资高于多少的,或者销量大于多少的
dict3 = {'S1':25000, 'S2':13000, 'S3':20000, 'S4':16000, 'S5':18000, 'S6':35000}
print(dict3) #输出 {'S1': 25000, 'S2': 13000, 'S3': 20000, 'S4': 16000, 'S5': 18000, 'S6': 35000}
dict3_0 = {key:value for key, value in dict3.items() if value > 20000}
print(dict3_0) #输出 {'S1': 25000, 'S6': 35000}
#4.3 集合推导式
l3 = [1, 1, 2]
s1 = {i**2 for i in l3}
print(s1) #输出 {1, 4}