本文用python的实例来介绍如何在python中按不同的条件在列表list、字典dict和集合set中筛选想要的数据
案例: 过滤列表[3, 5, -19, -3, 48, 22, -19, -33, 42, -4, -18]
中的负数。
最简单的实现方法:使用for循环实现,代码如下所示。
list_data = [3, 5, -19, -3, 48, 22, -19, -33, 42, -4, -18]
# (1) 创建空列表用于存储过滤结果:
list_data_filter_result = []
# (2) 下面使用for循环实现过滤列表中的负数:
for x in list_data:
if x >= 0:
list_data_filter_result.append(x)
# (3) 输出结果:
print(list_data_filter_result)
结果:
上面的for循环方案是一个简单的列表筛选方案,其实Python中还有以下两种更高级的列表筛选方案:
Python代码如下所示:
from random import randint
# (1) 使用randint生成包含十个数字的随机列表:
List_1 = [randint(-10, 10) for _ in range(10)]
# (2 )下面使用列表解析方法实现筛选类表中的正数:
List_Filter_1 = [x for x in List_1 if x >= 0]
# (3) 输出结果:
print('原始列表:', List_1)
print('过滤负数后的列表:', List_Filter_1)
filter
函数通过匿名函数lambda
对列表进行筛选,并返回一个filter生成器对象(filter object)。获取filter生成器对象的方法通常有两种:
StopIteration
异常;Python代码如下所示:
from random import randint
List_1 = [randint(-10, 10) for _ in range(10)]
# (1) 使用filter函数配合lambda匿名函数,对列表进行筛选
# 并返回一个filter生成器对象(filter object)。
filter_object = filter(lambda x: x >= 0, List_1)
# (2) 使用list列表构造器读取生成器对象中的内容:
List_Filter_1 = list(filter_object)
# (3) 输出结果:
print('原始列表:', List_1)
print('过滤负数后的列表:', List_Filter_1)
案例: 筛选出字典中值velue满足某些条件的项。比如:{‘xiaoliang’:87, ‘xiaowang’:99, ‘xiaoxin’:95, ‘xiaoli’:67, ‘xiaoran’:79, ‘xiaoxuan’:88}值高于90的项。
这里需要注意两个方面:
Python代码如下所示:
from random import randint
# (1) 创建一个包含20个学生名及成绩的字典创建方法
student_dict = {'student_%d' % i: randint(50, 100)
for i in range(1, 21)}
# (2) 下面使用字典解析方法,筛选出字典中选取成绩在90分以上的学生:
student_dict_filter = {stu_key:stu_val for stu_key, stu_val
in student_dict.items() if stu_val >= 90}
# (3) 输出结果:
print('原始字典:', student_dict)
print('筛选后的字典:', student_dict_filter)
结果:
filter
函数进行字典过滤方法具体步骤:
Python代码如下所示:
from random import randint
# 1、下面是创建一个包含学生及成绩字典的高级方式:
student_dict = {'student_%d' % i: randint(50, 100)
for i in range(1, 21)}
# 2、filter函数进行字典过滤方法具体步骤
# (1)下面使用filter函数来进行字典解析,在filter内部
# 使用匿名函数lambda进行字典过滤。
# (2) 注意:x返回的是字典student.items()的一个包含
# 字典key和value的元组,我们需要判断的只是字典的value。
# (3) 还要注意:需要使用字典构造器dict将filter生成器中
# 的内容取出,才能正常输出字典结果。
student_dict_filter = dict(filter(lambda x: x[1] >= 90,
student_dict.items()))
# 3、输出结果
print('原始字典:' ,student_dict)
print('筛选后的字典:' ,student_dict_filter)
结果:
案例:筛选出集合中能被3整除的元素,这里使用最常用的集合解析方法实现。
Python代码如下所示:
from random import randint
# (1)下面创建一个20个50以内的数字集合:
number_set = {randint(0, 50) for _ in range(20)}
# (2)下面使用集合解析方法筛选出集合中能够被3整除的元素:
number_set_filter = {x for x in number_set if x % 3 == 0}
# (3)输出结果:
print('原始集合:', number_set)
print('过滤后的的集合:', number_set_filter)