从Python中的多个条件搜索中找到匹配的记录

时间:2019-03-17 17:27:13

标签: python python-3.x pandas numpy

我有一组相关的整数,需要在大量数据中进行搜索,并且想知道什么是最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化的方法来执行此操作,或者是否有比测试每个值更有效的方法(缩放时会变得昂贵)。

谢谢!

2 个答案:

答案 0 :(得分:3)

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

过滤器功能应用于记录列表。对于每个记录,都会执行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}]

答案 1 :(得分:0)

list mapissubset一起使用

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}