如何在列表、字典、集合中根据条件筛选数据

  1. 通用做法 ----利用循环遍历判断
data = [1,3,5,7,9,11]
res = []
for x in data:
    if x >= 2:
        res.append(x)
print res
  1. 函数式编程/列表解析/字典解析/集合解析
#函数式编程
res = filter(lambda x:x>=2,data)
print res
#列表解析
res = [x for x in data if x>=2]
print res
#字典解析
dic = {'a':23,'b':98,'c':0}
res = {k:v for k,v in dic.iteritems() if v>90}
print res
#集合解析
s = (1,2,3,4,5,6,7,8)
res = {x for x in data if x>=2}
print res
  1. 三个实例
  • 列表解析
from random import randint
#使用列表生成式生成10个元素
data = [randint(-10,10) for _ in xrange(10)]
print data
#filter(func,sequence)
res = filter(lambda x:x>=0,data)
print res
# 列表解析
res = [x for x in data if x>=0]
print res
#Time: filter&列表解析
#>>>代表在ipython下
#>>> timeit filter(lambda x:x>=0,data)
#>>> timeit [x for x in data if x>=0]
# 结果:列表解析:432ns(纳秒)
#       filter  :1.4us(微秒)=1400ns
#       1微秒等于1000纳秒
res = [x for x in data if x>=0]
print res

列表解析更快,用timeit测试

  • 字典解析
from random import randint
# 某班有20个人,分数分布在60~100
d = {x: randint(60,100) for x in xrange(1,21) }
print d
print { k for k in d if k>15}
#循环值
print {v for v in d.values() if v>80}
#循环键
print {k for k in d.keys() if k>10}
#循环键和值
res = {k:v for k,v in d.iteritems() if v>90}
print res
  • 集合解析
from random import randint
data = [randint(-10,10) for _ in xrange(10)]
s = set(data) 
print s
sres = {x for x in s if x % 3 == 0}
print sres
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容