##【前言】大家好这里是 Charming讲Python编码小技巧 系列专栏。每天分享一个 30-seconds-of-python 仓库中的神级写法助你告别“屎山”代码写出让人眼前一亮的 Pythonic 风格1. 小技巧内容描述你在清洗数据时一定见过这种“脏列表”NoneFalse0空字符串这些无效值会干扰统计、筛选、展示。今天这个技巧就是一行过滤掉列表中的 falsy 值。defcompact(lst):returnlist(filter(None,lst))调用示例compact([0,1,False,2,,3,a,s,34])# [1, 2, 3, a, s, 34]一句话把杂乱输入快速变成可用数据。2. 为什么这么用为什么推荐这写法极简高效filter(None, lst)语义清楚、代码很短。数据清洗高频预处理阶段几乎天天会用到。可复用性强日志、接口返回、表单数据都适用。例子1清理表单提交结果raw_form[张三,,None,北京,False]print(compact(raw_form))# [张三, 北京]做入库前处理时先清空值能减少后续异常。例子2处理接口返回列表api_items[None,{id:1},{},False,{id:2}]print(compact(api_items))# [{id: 1}, {id: 2}]列表中混入空值是常见问题这一步能快速“净化”数据。例子3日志字段预过滤fields[ERROR,,payment,None,timeout]print(compact(fields))# [ERROR, payment, timeout]做日志关键词分析前先过滤无效字段结果更准确。3. 更多实用场景爬虫抓取结果的空内容清理特征工程前的样本字段预处理导出报表前的空值字段过滤消息队列消费时的无效载荷剔除4. 和其他常规方案的性能对比情况常规方案通常是方案A手写for循环 if itemappend方案B列表推导式[x for x in lst if x]对比来看filter(None, lst)与列表推导式都属于单次遍历性能思路相近常见 O(n)filter(None, lst)在“只做过滤”场景语义更聚焦手写循环更啰嗦可读性和复用性都偏弱5. 进阶技巧若你不想过滤0可改成自定义条件如仅过滤None和空串。对字符串列表可先strip()再compact连空白字符串一起处理。在流水线处理中可与map()、group_by组合形成清洗 转换一体链路。6. 总结compact是数据清洗中的高性价比技巧写法短、效果直观、复用价值高。遇到“列表里掺杂无效值”的场景直接拿来就能用。点赞 收藏明天继续解锁一个 30-seconds-of-python 神级技巧