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

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