首页 > 解决方案 > 从 Python 中的多个条件搜索中查找匹配记录

问题描述

我有一组相关的整数,我需要在大量数据中搜索它们,并且想知道什么被认为是最 Pythonic 或最有效的方法。

例如,如果我有一个整数列表:

query = [1,5,7,8]

并且需要找到所有包含这些值的对象:

record_1 = [0,5,7,8,10,11,12]
record_2 = [1,3,5,8,10,13,14]
record_3 = [1,4,5,6,7,8,11]
record_4 = [1,5,6,7,8,10,14]
record_5 = [1,5,8,9,11,13,16]

我知道将每条记录加载到更大的列表中并迭代测试它们是否包含查询中找到的所有整数并不难,但我想知道是否有更 Pythonic 的方式来做这件事,或者如果有比测试每个值更有效的方法(缩放时会变得很昂贵)。

提前致谢!

标签: pythonpython-3.xpandasnumpy

解决方案


如果查询和记录中的数字是唯一的,我会将它们表示为 a sets(或 freezesets 以获得更好的性能)。假设您有一个记录列表和一个查询:

过滤器功能应用于记录列表。对于每条记录,都会执行 lambda 函数来查看它是否为真。lambda 函数检查查询是否是当前记录的子集。因此,过滤后的列表包含我们的结果。结果将转换为列表。

query = set([1,5,7,8])

records = [
    set([0,5,7,8,10,11,12]),
    set([1,3,5,8,10,13,14]),
    set([1,4,5,6,7,8,11]),
    set([1,5,6,7,8,10,14]),
    set([1,5,8,9,11,13,16]),
]

matches = list(filter(lambda r: query.issubset(r), records))
print(matches)

输出:

[{1, 4, 5, 6, 7, 8, 11}, {1, 5, 6, 7, 8, 10, 14}]

推荐阅读