在Python中从多条件搜索中查找匹配的记录

2024-04-23 21:37:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组相关的整数,我需要在大量的数据中搜索,我想知道什么是最适合做这件事的或者最有效的方法。你知道吗

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

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]

我知道将每条记录加载到一个更大的列表中并反复测试每条记录是否包含all在查询中找到的整数并不太困难,但我想知道是否有一种更适合python的方法,或者如果有比测试每个值更有效的方法(扩展时会变得昂贵)。你知道吗

提前谢谢!你知道吗


Tags: 数据对象方法列表记录整数allrecord
2条回答

issubset一起使用listmap

for y,x in zip(records,map(lambda x : query.issubset(x),records)):
    if x :
        print(y)


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

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

过滤函数应用于记录列表。对于每个记录,执行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}]

相关问题 更多 >