Python实用技巧之列表、字典、集合中根据条件筛选数据详解

季宁
季宁
发布时间:2026-10-12 | 2人浏览过
原创

在Python数据处理中,根据特定条件筛选列表、字典和集合是常见需求。本文深入探讨三种核心数据结构(列表、字典、集合)的筛选策略,对比传统迭代、内置filter函数与列表推导式的执行效率,并提供可直接运行的代码示例,帮助开发者提升代码性能。

列表筛选的三种方式与性能对比

处理列表数据时,我们通常面临三种选择:使用for循环手动构建结果、利用内置的filter函数,或者采用列表推导式。以下通过一个具体案例——从随机生成的整数列表中筛选出所有非负数,来展示这三种方法的实现与差异。

1. 传统迭代方式

最基础的方法是使用for循环遍历列表,通过if语句判断条件,并将符合条件的元素追加到新列表中。这种方法逻辑直观,但代码相对冗长。

data = [2, 7, -4, -1, 3, 0, 8]
res = []
for i in data:
    if i >= 0:
        res.append(i)
print(res)

2. 使用filter函数

Python内置的filter函数可以接收一个过滤条件(函数)和一个可迭代对象。它返回一个迭代器,包含所有使条件函数返回True的元素。这种方式更加函数式,但需要注意filter返回的是迭代器,而非列表。

from random import randint
data = [randint(-10,10) for _ in range(10)]
# filter 接收两个参数,第一个参数为过滤条件,第二个参数为过滤范围
f = filter(lambda x: x>=0, data)
for j in f:
    print(j)

3. 列表推导式(推荐)

列表推导式是Python中最为简洁且高效的筛选方式。它在单行代码内完成了遍历、条件判断和结果构建,通常比前两种方法速度更快。

from random import randint
data = [randint(-10,10) for _ in range(10)]
f = [i for i in data if i >= 0]
print(f)

性能提示:在大多数场景下,列表推导式的执行速度优于filter函数和传统for循环,建议优先使用。

字典的条件筛选

字典筛选通常基于键值对中的值进行过滤。例如,我们需要从一个包含学生成绩(1-20号,分数60-100)的字典中,筛选出分数高于90分的记录。

import random
dict = {i: random.randint(60, 100) for i in range(1, 21)}
# print(dict)
# 根据值过滤除分数高于90的人
res = {k: v for k, v in dict.items() if v > 90}
print(res)

这里使用了字典推导式,通过遍历dict.items()获取键值对,并应用条件v > 90进行过滤。这种方式同样保持了代码的简洁性和执行效率。

集合的条件筛选

集合(set)的筛选逻辑与列表类似,但结果仍保持集合的唯一性特性。例如,从一个随机生成的整数集合中筛选出所有能被2整除的偶数。

import random
data = set(random.randint(-10,10) for _ in range(10))
# print(data)
# 筛选集合中能被2整除的数
res = {i for i in data if i % 2 ==0}
print(res)

注意:集合推导式使用花括号{},且结果会自动去重。如果原始数据中存在重复值,筛选后的集合仍只保留唯一值。

总结

在Python中,根据条件筛选数据时,列表推导式和字典/集合推导式因其简洁性和高性能成为首选。filter函数适用于需要惰性求值或处理大型数据流的场景,而传统for循环则适用于逻辑极其复杂、难以用推导式表达的情况。掌握这些技巧,能显著提升数据处理代码的可读性与执行效率。

以上就是Python实用技巧之列表、字典、集合中根据条件筛选数据详解的详细内容,更多关于Python数据筛选技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表