python如何在列表,字典,集合中进行筛选
python备忘

比如说我随机创建一个-10,10的一个列表,并且筛选出所有大于0的数
from random import randint data = [randint(-10,10) for _ in range(10)]
当然我们可以用传统的迭代来解决这个问题
res = [] for x in data: if x>=0: res.append(x) print res
但是这个效率比较低,而且比较啰嗦。我们用filter函数来处理一下
res = filter(lambda:x:x>=0,data) print res
我们也可以使用列表解析来处理
res = [x for x in data if x>=0] print res
哪个效率比较高呢,我们可以测试一下,我们分别在这两种处理前面加上timeit来监控一下处理时间,发现列表解析这个效率要比filter要高。
字典筛选元素怎么处理呢,假如一个班级有50个人,我们把这50个人的成绩保存在字典里面,然后取出90分以上的成绩
首先我们生成一个50-100的随机值
d = {x:randint(50,100) for x in range(1,50)}
现在我们根据值来过滤出90分以上的成绩,这个和上面的列表解析类似
ret = {k:v for k,v in d.iteritems() if v>90} print(ret)
这样我们就取出了90分以上人的成绩,然后我们看看集合的解析
data = [randint(-10,10) for _ in range(10)] s = set(data)
我们得出有被3整除的元素好了
{x for x in s if x%3==0}
这个比较简单,先总结一下备忘