如何从列表的列表b中筛选与列表的列表a中子列表前两元素匹配的子列表?
筛选嵌套列表中前两个元素匹配的子列表
给定两个嵌套列表:
a = [[1, 2, 3], [1, 2, 8], [1, 3, 3]] b = [[1, 2, 5], [1, 2, 9], [5, 3, 3]]
需求是从b中提取所有前两个元素与a中任意子列表前两个元素完全一致的子列表,预期结果为[[1, 2, 5], [1, 2, 9]]。
高效解决方案(推荐)
先将a中所有子列表的前两个元素提取为元组并存入集合(集合的成员查询效率远高于列表),再通过列表推导式筛选b:
# 提取a中所有子列表的前两个元素,转为可哈希的元组存入集合 a_prefixes = {(sub[0], sub[1]) for sub in a} # 筛选b中前两个元素在集合内的子列表 result = [sub for sub in b if (sub[0], sub[1]) in a_prefixes] print(result)
执行后输出:
[[1, 2, 5], [1, 2, 9]]
基础实现方案(适合小数据量)
直接通过双层循环逐个比较子列表的前两个元素,逻辑直观但效率较低:
result = [sub_b for sub_b in b for sub_a in a if sub_b[:2] == sub_a[:2]] print(result)
注意:如果a中存在重复的前缀组合,此方法会导致b中符合条件的子列表被多次添加,因此优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者Khaled Koubaa
相关产品推荐
相关产品推荐

