如何不使用循环提取listA中存在于listB的id值?
提取列表中符合条件的ID(无需显式循环)
给定数据:
listA = [{"id":"5","age":"44"},{"id":"8","age":"34"},{"id":"15","age":"84"}] listB = ["9","1","7","5","10","15","20"]
预期结果:
listResult = ["5","15"]
方案1:集合+列表推导式
先把listB转为集合(大幅提升成员判断效率),再用列表推导式完成筛选:
id_set = set(listB) listResult = [item["id"] for item in listA if item["id"] in id_set]
方案2:函数式编程(filter + map)
如果偏好函数式风格,可通过filter过滤符合条件的对象,再用map提取目标ID:
id_set = set(listB) listResult = list(map(lambda x: x["id"], filter(lambda x: x["id"] in id_set, listA)))
说明:两种方案都没有编写显式的for/while循环语句,满足需求。将listB转为集合是核心优化——列表的in操作时间复杂度为O(n),集合则是O(1),数据量越大,效率差异越显著。
内容的提问来源于stack exchange,提问作者JK2018
相关产品推荐
相关产品推荐

