python的推导式包括列表推导式、字典推导式和集合推导式
列表推导式
列表推导式的书写形式一般为:[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
其中表达式可以包含多个变量或元素,后面跟上一个for语句的循环,对列表、元组或集合等序列进行遍历,当需要筛选序列中的元素时可以用if条件语句进行判断,if语句可以有多个,代表多个条件。
例:
list0 = [x**2 for x in range(10)]
x**2是包含一个变量的表达式,后面跟上一个for语句对range(10)进行遍历,得到的是list0=[1, 4, 9, 16, 25, 36, 49, 64, 81]
。
list1 = [x**2 for x in range(10) if x>5]
这里对遍历得到的每个x的值进行判断,当满足条件时才会代入表达式中,得到的是list1=[36, 49, 64, 81]
。
list2 = [(x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8]
(x,y)这个表达式包含两个变量,则后面需要用两个for语句分别获得x,y的值,每个变量有两个条件进行限制,得到的是list2=[(5, 9), (7, 9), (9, 9)]
。
注:当把列表推导式的[]符号更换为()时得到的结果是一个生成器
字典推导式
字典推导式和列表推导式类似,只是字典推导式的表达式形式是键值对的形式,使用的括号是花括号{}。
例:
m = {"a":1, "b":2, "c":3, "d":4}
dict0={v:k for k,v in m.items()}
这个推导式可以将字典m的键和值互相调换,得到的是dict0={1: 'a', 2: 'b', 3: 'c', 4: 'd'}
集合推导式
集合推导式跟列表推导式也是类似的,它的区别在于它使用的是花括号{},由于集合具有唯一性,所以得到的集合中没有重复的元素。
例:
s = {i*2 for i in [1,1,2]}
结果为s = {2,4}