如何用Python列表推导式改写指定的循环代码?
问题分析
你原代码的问题在于遍历列表同时修改列表,这会导致部分元素被跳过(因为remove会改变列表长度和元素索引),这也是你觉得写法不规范的核心原因。要实现保留x.fol中不在sat_links里的元素,用列表推导式直接生成新列表是更稳妥的方式。
改写后的代码
直接对每个x.fol重新赋值,用列表推导式筛选符合条件的元素:
for x in unsat_links: x.fol = [i for i in x.fol if i not in sat_links]
补充优化建议
如果sat_links是一个元素较多的列表,建议先把它转换成集合:
sat_links_set = set(sat_links) for x in unsat_links: x.fol = [i for i in x.fol if i not in sat_links_set]
集合的in操作时间复杂度是O(1),比列表的O(n)高效很多,数据量越大,性能提升越明显。
内容的提问来源于stack exchange,提问作者Sabrina Hatch
相关产品推荐
相关产品推荐

