Python3 & 推导式
2020-11-08 本文已影响0人
乘风破浪的姐姐
推导式(又称解析式),是 Python 的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列。具有语言简洁,速度快等优点。共有三种推导:
列表(list)推导式
字典(dict)推导式
集合(set)推导式
一.列表推导式
语法:
变量名 = [表达式 for 变量 in 列表 for 变量 in xxx]
变量名 = [表达式 for 变量 in 列表 if 条件]
作⽤:⽤⼀个表达式创建⼀个有规律的列表或控制⼀个有规律列表。
例一:创建⼀个0-10的列表。
while循环实现
# 1. 准备⼀个空列表
list1 = []
# 2. 书写循环,依次追加数字到空列表list1中
i = 0
while i < 10:
list1.append(i)
i += 1
print(list1)
for循环实现
list1 = []
for i in range(10):
list1.append(i)
print(list1)
列表推导式实现
list1 = [i for i in range(10)]
print(list1)
例二:创建⼀个0-10所有偶数的列表
list1 = [i for i in range(1, 11) if i % 2 == 0]
print(list1) #结果:[2,4,6,8,10]
例三:有一列表 lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ,取出 1/4/7 和 1/5/9元素
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
lst1 = [lst[i][0] for i in range(len(lst))]
print(lst1) #结果:[1, 4, 7]
lst2 = [lst[i][i] for i in range(len(lst))]
print(lst2) #结果:[1, 5, 9]
二.字典推导式
字典推导式作⽤:快速合并列表为字典或提取字典中⽬标数据。
例一:快速更换key和value
dict1= {'a': 10, 'b': 34}
dict2= {v: k for k, v in dict1.items()}
print(dict2) # 结果:{10: 'a', 34: 'b'}
例二:将两个列表合并为⼀个字典
list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'man']
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1) #结果:{'name': 'Tom', 'age': 20, 'gender': 'man'}
例三:提取字典中电脑数量⼤于等于200的数据
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
count1 = {key: value for key, value in counts.items() if value >= 200}
print(count1) # 结果:{'MBP': 268, 'DELL': 201}
三.集合推导式
跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}。
集合推导式自带去重的功能。
例一
set1= {x**2 for x in [1, 1, 2]}
print(set1) # 结果:set([1, 4])
例二:把abc排除后,获取剩余字符串
s = {i for i in 'abasrdfsdfa' if i not in 'abc'}
print(s)
# 结果:
{'r', 'f', 's', 'd'}
四.元组推导式
在python中元组被用作生成器。所以没有元组推导式。
tup = (x for x in range(9))
print(tup)
print(type(tup))
# 打印结果:
<generator object <genexpr> at 0x000000000255DA98>
<class 'generator'>
从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,而是一个生成器对象。
如果想要使用元组推导式获得新元组或新元组中的元素,可以使用 tuple() 函数,可以直接将生成器对象转换成元组。
tup = tuple(x for x in range(9))
print(tup)
print(type(tup))
# 打印结果:
(0, 1, 2, 3, 4, 5, 6, 7, 8)
<class 'tuple'>