Python的列表、字典或者集合中如何进行数据筛选呢?首先想到的当然是最简单的,使用循环语句进行筛选。下面的在列表、字典或者集合中进行数据筛选的技巧来源与慕课网的《Python进阶强化训练》中的内容。以下是相关的学习笔记。
实例一、过滤列表中的负数
主要的思路是使用列表生成式的方式去进行列表的筛选。或者使用filter函数,调用lambda函数筛选。但是列表生成式的效率更高。下面是实例代码:
#!/usr/local/env python # coding:utf-8 from random import randint __author__ = "风轻情淡" # 生成10个随机整数的列表 data = [randint(-10, 10) for _ in range(10)] # filter函数生成的是一个filter对象,需要再迭代取值 ret1 = filter(lambda x: x < 0, data) print(ret1) # 列表生成式方式直接获得列表,速度比filter函数方式要快一些 ret2 = [x for x in data if x < 0] print(ret2)
实例二、筛选字典值高于90的项目
字典筛选的思路跟列表筛选差不多,使用字典生成式。需要注意的是:Python 3.x 里面,iteritems() 和 viewitems() 这两个方法都已经废除了,而 items() 得到的结果是和 2.x 里面 viewitems() 一致的。在3.x 里 用 items()替换iteritems() ,可以用于 for 来循环遍历。下面是实例代码:
#!/usr/local/env python # coding:utf-8 from random import randint __author__ = "风轻情淡" # 生成20个成绩的字典 data = {x: randint(60, 100) for x in range(1, 21)} # 使用字典生成式,可以直接筛选数据 ret1 = {k: v for k, v in data.items() if v > 90} print(ret1)
实例三、筛选能被3整除的元素
集合的处理思路和列表处理的思路基本是一致的,实例代码如下:
#!/usr/local/env python # coding:utf-8 from random import randint __author__ = "风轻情淡" # 生成10个随机整数的列表 data = [randint(-10, 10) for _ in range(10)] # 把列表转化为集合 s1 = set(data) # 集合生成式方式直接获得结果 ret1 = {x for x in s1 if x % 3 == 0} print(ret1)
以上的数据筛选方式,都是使用的生成式的方式,相对比较简洁高效。