python列表/字典推导式
python中有一个语法糖非常实用,经常用来快速生成列表,字典等数据类型,灵活使用可以提高我们的开发效率,它就是列表/字典推导式(也称列表/字典解析式)
一:列表推导式
先简单写个for循环的例子
lists = []
for i in range(10):
lists.append(i)
print(lists)
#print--[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
在这一段代码里面最终打印出来列表的会存放0-9这十个数,那么同样的数据用列表推导式生成呢
lists = [i for i in range(10)]
print(lists)
#print--[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
可以看出,代码量简洁了很多
那么如果我们想在列表推导式里面加上判断条件呢
1:只有if判断时,在末尾加if
lists = [i for i in range(10) if i!=2]
print(lists)
#print--[0, 1, 3, 4, 5, 6, 7, 8, 9]
从结果看出当if为True时,取这个数据,而False时i,则不取数据,这点和正常写法是一样的
2:if-else判断时,在中间加if-else
lists = [i if i!=2 else i*2 for i in range(10)]
print(lists)
#上面代码意为[表达式1 if i!=2 else 表达式2 for i in range(10)]
#print--[0, 1, 4, 3, 4, 5, 6, 7, 8, 9]
从结果上看,当if为真,执行的是i这个表达式1,当if为假时,则执行i*2这个表达式2
二:字典推导式
先甩一段正常生成字典的代码
dicts = {}
for i in range(10):
dicts[i] = i+1
print(dicts)
#print--{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}
这里是字典推导式的对比
dicts = {i:i+1 for i in range(10)}
print(dicts)
#print--{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}
这里和列表推导式大体上是一样的,只不过有两点要注意
1、字典推导式用的是{}花括号包起来,而列表推导式用的是[]方括号。
2、因为字典是键值对的形式,所以表达式也要写成键值对的形式(要有个冒号)