过滤掉列表中的负数
常规的方法,可以用循环来做。
data = [1,4,-2,-5,6,7,8,9,-3]
res = []
for x in data:
if x >= 0:
res.append(x)
print(res)
第一种方式:filter函数
filter函数,第一个参数传的是function,第二个参数传的是list,tuple,string
list(filter(lambda x:x>=0,data))
[1, 4, 6, 7, 8, 9]
列表推导式
[x for x in data if x>= 0 ]
[1, 4, 6, 7, 8, 9]
接下来看一下两种方式的差别,会用到timeit
timeit list(filter(lambda x:x>=0,data))
859 ns ± 1.36 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
timeit [x for x in data if x>= 0]
342 ns ± 1.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
可以看到列表推导式,这种方式明显快于filter函数。而且这两种方式都快于迭代的方式。
筛选出字典中高于90的值
import random
d = {x:random.randint(60,100) for x in range(1,21)}
{k:v for k,v in d.items() if v>90 }
{1: 95, 3: 95, 6: 93}
筛选出集合中能被3整除的元素
s = set(data)
{-5, -3, -2, 1, 4, 6, 7, 8, 9}
{x for x in s if x % 3 == 0}
{-3, 6, 9}