推导式:用一行循环判断遍历出一系列数据的方式

注:推导式在使用时只能使用for循环和if判断,if判断只能是单项判断

推导式有三种形式:列表推导式、集合推导式、字典推导式

①普通推导式:通过[]和for形式构成

②带有判断的推导式:通过[] for if形式构成

③多循环推导式:通过[] for for...形式构成

④带有判断条件的循环推导式:通过[] for for if的形式构成

一、列表推导式

eg1:

list_a = [f'data"{i}"'for i in range(100)]

print(list_a)

执行结果:['data"0"', 'data"1"', 'data"2"', 'data"3"', 'data"4"', 'data"5"', 'data"6"',...]

eg2:生成一个['data1', 'data3', 'data5'......'data99']的列表

list_b = [f'data"{i}"'for i in range(100) if i % 2 == 1]  # if在最后起过滤作用

print(list_b)

eg3:生成一个['data0', 'num1', 'data2', 'num3'.....'data98', 'num99']的列表

list_c = [f'data"{i}"'if i % 2 == 0 else f'num"{i}"'for i in range(100)]  # 'data' if else 'num'做条件判断,循环在后

print(list_c)

# 三元运算符

age = input('输入年龄:')

res = '成年' if age > 17 else '未成年'

print(res)

二、字典推导式

eg1:有一个列表list_d,把它转换为一个下标为key,值为value,字典格式的数据

list_d = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

非推导式做法:

dict_a = {}

for i, j in enumerate(list_d):

  dict_a[i] = j

print(dict_a)

推导式做法:

# 语法:{key:value for i in xx}

dict_b = {k: v for k, v in enumerate(list_d)}

print(dict_b)

执行结果:

{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g'}

eg2:将如下字符数据转化为字典

cook_str = 'BIDUPSID=D0727533D7147B7;PSTM=1530348042; BAIDUID=B1005C9BC2EB28; sugstore=0;__cfduid=d0a13458f8ac2a;BD_UPN=12314353;ispeed_lsm=2;BDORZ=B490B5EBF6F3CD402'

# 字典推导实现

dict_c = {i.spilt('=')[0].strip(): i.split('=')[1] for i in cook_str.split(';')}

print(dict_c)

# 字典推导式结合列表推导式使用

dict_d = {k.strip(): v for k, v in [i.split('=') for i in cook_str.split(‘;’)]}

print(dict_d)

执行结果:

{'BIDUPSID': 'D0727533D7147B7', 'PSTM': '1530348042', 'BAIDUID': 'B1005C9BC2EB28', 'sugstore': '0', '__cfduid': 'd0a13458f8ac2a', 'BD_UPN': '12314353', 'ispeed_lsm': '2', 'BDORZ': 'B490B5EBF6F3CD402'}

三、集合推导式

eg:

gather_a = {i * 5 for i in range(11)}

print(gather_a)

执行结果:

{0, 35, 5, 40, 10, 45, 15, 50, 20, 25, 30}

PS:

enumerate()函数:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据下标和数据,一般用在 for 循环当中。

split()函数:拆分字符串,通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)。

strip()函数:方法用于移除字符串头尾指定的字符(默认为空格或者换行符)或字符序列。

zip()函数:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

 eval()函数:用于类型转换,它可以去掉列表里数据的引号!!!