最近在学习机器学习时,见到字典的key-value颠倒,因此开启了简洁高效的推导式学习!
前言
推导式就是将多行循环和判断语句,用简洁的语法写在一行。
一、字典推导式
字典推导式返回的是一个字典,因此整个表达式用{}括住!
1、问题
实例1:如果表达式condition成立,就将字典dict的键和值赋值给key_new和value_new,并生成新的字典。
{key_new:value_new for key,value in dict.items() if condition}
实例2:如果表达式condition成立,就将字典dict的键和值赋值给key_new和value_new,并生成新的字典。
若不成立,则将新生成字典的值赋为value_new2。
{key_new:value_new if condition else value_new2 for key,value in dict.items()}
2、 实例
案例1:将字典中的所有key设置为小写
dict3 = {key.lower():value for key,value in dict1.items() }
print(dict3)
# 案例2:将字典中所有key是小写字母的value统一赋值为'error'
dict4 = {key:value if key.isupper() else "error" for key,value in dict1.items() }
print(dict4)
二、集合推导式
集合推导式返回的是一个集合,因此整个表达式需要用{}括住,与字典推导式不同的是{}中只有value,没有key。
1、实例
遍历一个可迭代对象,生成一个集合:
set_jh={value for value in '嫁人就嫁程序员,挣得多,X的早!'}
print(set_jh)
2、注意
- 集合是无需不重复的,并且每次运行的显示的顺序是不一样。
- 集合推导式是用{},括起来,但与字典推导式不同的是推到出的是一个值,不是字典推导式中key:value形式。
- 推导式中后面加的判断语句、还是循环语句都可以根据自己的需求来使用。
三、列表推导式
- 推导式中常用的可迭代对象,range()函数是一个十分重要的可迭代对象。 - range()函数做可迭代对象,使推导式的可读性和简洁性大大提高。 - 列表推导式返回的是一个列表,因此整个表达式需要能够用[]括住!
# in后面跟其他可迭代对象,如字符串
list_c = [7 * c for c in "python"]
print(list_c)
# 带if条件语句的列表推导式
list_d = [d for d in range(6) if d % 2 != 0]
print(list_d)
# 多个for循环
list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
print(list_e)
# 嵌套列表推导式,多个并列条件
list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0]
print(list_g)
总结
- 以上就是今天要讲的内容,本文介绍了python推导式的的使用;
- 推导式可以分为:列表推导式、字典推导式、集合推导式;
- 其中可迭代对象、循环、判定条件是我们需要认真揣摩;
- 推导式的宗旨就是简洁,可读性强。