在列表、字典、集合中根据条件筛选数据
通用解法:迭代
如何在列表、字典、集合中根据条件筛选数据?通常我们的做法是使用迭代。例如针对下面的列表,我们要筛选出其中的非负数,那么通常的做法如下。
data=[2,-2,3,2,5,1,-3,3,,3]
res=[]
forxindata:
ifx>=:
res.append(x)
printres
那么,有没有更加高效优雅的解法呢?
Python 中更优雅的解决方案
列表解析
针对列表中根据条件筛选数据,有两种方法,一是使用函数,二是使用更为高效的列表解析。(据代码测试,列表解析的效率是函数的两倍。)
# 筛选出列表中所有的非负数
data=[2,-2,3,-2,,,-10,10,9,-8]
# 第一种解法:使用 filter() 函数
filter(lambdax:x>=,data)
# 第二种解法:列表解析
[xforxindataifx>=]
字典解析
针对字典,python中也有高效的字典解析。例如,筛选出字典中所有值大于90的元素,可以采用如下代码。
# 筛选出字典中所有值大于90的元素
d={1:70,2:90,3:44,4:55,6:100,7:14,8:88,9:96,10:70}
{k:vfork,vind.iteritems()ifv>90}
集合解析
针对集合,我们也有集合解析,形式上与字典解析一致。例如,我们要筛选出集合中所有可以被3整除的数。
# 筛选出集合中所有可以被3整除的数
s={2,-2,3,2,5,1,-3,3,,3}
{xforxinsifx%3==}
领取专属 10元无门槛券
私享最新 技术干货