Python 过滤序列元素
一、问题
过滤序列元素
二、解决方案
1. 列表推到
lst = [1, 4, -5, 10, -7, 2, 3, -1]
print([n for n in lst if n > 0])
# [1, 4, 10, 2, 3]
列表推到占用内存,可以用生成器表达式代替。
2. 生成器表达式
pos = (n for n in lst if n > 0)
print(pos)
for i in pos:
print(i)
输出:
<generator object <genexpr> at 0x0000027741A098C8>
1
4
10
2
3
过滤规则比较复杂,不能简单的在列表推到或生成器表达式中表达出来,
可以将过滤代码放到一个函数中,然后使用 filter()
函数。
3. filter() 函数
lst = ['1', '2', '3', '-', '4', 'N/A', '5']
def if_int(val):
for i in val:
if i.isdigit():
return True
else:
return False
result = list(filter(if_int, lst))
print(result)
输出:
['1', '2', '3', '4', '5']
三、讨论
还有一个过滤工具 itertools.compress()
。
以迭代器和布尔选择器作为输入,输出迭代对象中布尔值是 True 的元素。
name = ['wangke', 'wangyan', 'wangying', 'qinlu', 'hongxia']
age = [30, 18, 18, 28, 58]
from itertools import compress
more18 = [n>18 for n in age]
print(more18)
print(list(compress(name, more18))) # 输出age>18的name
输出:
[True, False, False, True, True]
['wangke', 'qinlu', 'hongxia']
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2017-12-02 MongoDB(课时10 数组)
2017-12-02 MongoDB(课时9 范围运算)
2017-12-02 MongoDB(课时8 模运算)
2017-12-02 MongoDB(课时7 逻辑运算)
2017-12-02 MongoDB(课时6 关系查询)
2017-12-02 MongoDB(课时5 数据查询)