Python如何根据另一列表中的指定值过滤目标列表
列表过滤需求实现方案
现有代码问题说明
- 逻辑反向:当前写的判断条件
zone == 36仅会保留等于整数36的元素,和「过滤掉排除列表所有元素」的需求完全相反 - 类型不匹配:
VAV_ID_list中所有元素都是字符串类型,和整数36做相等判断永远不成立,运行后只会得到空列表
可行实现方案
基础版(小数据量场景直接用)
直接在列表推导式中判断元素不在排除列表中即可:
VAV_ID_list = ['36','38','21','29','31','25','9','13','14','19','30','8','26','6','34','11','12028','20','27','15','12032','23','16','24','37','39','12033','10'] VAV_ID_exclude_list = ['36','38','21','29','31','25','9','13','14','19','30','8','26','6'] filtered_VAV_ID_list = [zone for zone in VAV_ID_list if zone not in VAV_ID_exclude_list] print(filtered_VAV_ID_list)
运行后输出结果为:['34', '11', '12028', '20', '27', '15', '12032', '23', '16', '24', '37', '39', '12033', '10']
优化版(大数据量场景性能更高)
如果排除列表元素数量较多,可以先将其转换为集合,集合的in查询时间复杂度为O(1),远高于列表的O(n):
VAV_ID_list = ['36','38','21','29','31','25','9','13','14','19','30','8','26','6','34','11','12028','20','27','15','12032','23','16','24','37','39','12033','10'] VAV_ID_exclude_list = ['36','38','21','29','31','25','9','13','14','19','30','8','26','6'] exclude_set = set(VAV_ID_exclude_list) filtered_VAV_ID_list = [zone for zone in VAV_ID_list if zone not in exclude_set] print(filtered_VAV_ID_list)
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

