python - 从 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 的方式来做这件事,或者如果有比测试每个值更有效的方法(缩放时会变得很昂贵)。
提前致谢!
解决方案
如果查询和记录中的数字是唯一的,我会将它们表示为 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}]
推荐阅读
- python - 带有分号数据的字典到 Pandas Dataframe
- python-3.x - Python NetworkX:节点收缩后的图形更新
- r - 是否有 R 函数可以以这种形式获取我的数据库?尝试收集并没有解决我的问题
- azure - 使用 Azure DevOps 进行 Azure Sql 开发的标准是什么?
- reactjs - 如何在标签导航中访问导航道具 - 反应导航
- embedded - Stm32 ADC - DMA 传输仅使用半缓冲区
- javascript - 有没有办法可以定义文档?
- python - 如何从 psutil 捕获错误代码或错误消息
- paypal - Paypal:通过 API 获取每个计划的活跃订阅者
- artificial-intelligence - 如何在多租户环境中大规模服务 AI 模型?