Python实例:根据条件筛选列表、字典、集合中数据的方法
一、过滤列表中的负数
1.1 方案一:使用for循环实现列表过滤
场景描述:过滤列表[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]
list_data_filter_result = []
for x in list_data:
if x >= 0:
list_data_filter_result.append(x)
print(list_data_filter_result)
代码的实现结果如下图所示:
上面的for循环方案是一个简单的列表筛选方案,其实Python中还有以下两种更高级的列表筛选方案:
(1)列表解析:[x for x in list_data if x >= 0]; (2)使用filter 函数配合lambda 匿名函数:filter(lambda x: x >= 0, list_data)
1.2 方案二:使用列表解析进行列表过滤
Python代码如下所示:
from random import randint
List_1 = [randint(-10, 10) for _ in rang(10)]
List_Filter_1 = [x for x in List_1 if x >= 0]
print('原始列表:', List_1)
print('过滤负数后的列表:', List_Filter_1)
输出结果如下图所示:
1.3 方案三:使用filter函数进行列表过滤
filter 函数通过匿名函数lambda 对列表进行筛选,并返回一个filter生成器对象(filter object)。获取filter生成器对象的方法通常有两种:
- 1、通过next函数依次读取,当读取完列表内容后,会抛出一个
StopIteration 异常; - 2、使用
list 列表构造器读取filter生成器对象中的内容(本文使用的方法)。
Python代码如下所示:
from random import randint
List_1 = [randint(-10, 10) for _ in range(10)]
filter_object = filter(lambda x: x >= 0, List_1)
List_Filter_1 = list(filter_object)
print('原始列表:', List_1)
print('过滤负数后的列表:', List_Filter_1)
总结:上面三种方法,方案一是最基本的方法,最常用的是方案二,方案三属于进阶应用。
二、筛选出字典中值大于某个值的项
场景描述:筛选出字典中值velue满足某些条件的项。比如:{'xiaoliang':87, 'xiaowang':99, 'xiaoxin':95, 'xiaoli':67, 'xiaoran':79, 'xiaoxuan':88} 值高于90的项。
2.1 方案一:使用字典解析进行字典筛选
这里需要注意两个方面:
- 1、创建一个包含学生名、成绩字典的方式;
- 2、字典解析筛选方法。
Python代码如下所示:
from random import randint
student_dict = {'student_%d' % i: randint(50, 100)
for i in range(1, 21)}
student_dict_filter = {stu_key:stu_val for stu_key, stu_val
in student_dict.items() if stu_val >= 90}
print('原始字典:', student_dict)
print('筛选后的字典:', student_dict_filter)
输出结果如下图所示:
2.2 方案二:使用filter函数进行字典筛选
filter函数进行字典过滤方法具体步骤: 1、在filter函数中使用匿名函数lambda对字典进行过滤; 2、注意lambda的参数x 接收的是字典项student.items(),并以元组形式存储。另外,我们需要判断的是字典的value,即通过x[1]> = 90 实现成绩筛选; 3、由于filter函数返回的是一个filter生成器对象(filter_object),所以需要使用字典构造器dict读取其中内容,才能正常输出字典结果。
Python代码如下所示:
from random import randint
student_dict = {'student_%d' % i: randint(50, 100)
for i in range(1, 21)}
student_dict_filter = dict(filter(lambda x: x[1] >= 90,
student_dict.items()))
print('原始字典:' ,student_dict)
print('筛选后的字典:' ,student_dict_filter)
输出结果如下图所示:
三、筛选出集合中符合某个条件的元素
场景描述:筛选出集合中能被3整除的元素,这里使用最常用的集合解析方法实现。
Python代码如下所示:
from random import randint
number_set = {randint(0, 50) for _ in range(20)}
number_set_filter = {x for x in number_set if x % 3 == 0}
print('原始集合:', number_set)
print('过滤后的的集合:', number_set_filter)
输出结果如下图所示:
|