Python,n键查找最有效的结构

时间:2017-11-28 16:16:50

标签: python algorithm python-3.x search data-structures

我有一组需要根据键查找的数据:

#  fk is a comparsion function
#  Keys go from 1 to n
#  Assume that this is done whilst going through rows that have said keys and item inside

if f1(key1, val1) and f2(key2, val2)... and fn(keyn, valn):
    return item

什么是最有效的数据结构&用于进行这种查找的算法集成在python中。优选地存在于默认库中或维护良好的库中。目前我正在寻找类似于boost的多图的东西,但我认为可能有更好的方法。

在我的情况下,我有3个键,比较函数是'<','>'并且'=='但我问这个一般情况,因为我假设可能会弹出类似的问题(或者之前可能已经弹出,我找不到它们)。

1 个答案:

答案 0 :(得分:0)

from functools import partial

from operator import lt, le, eq, ne, ge, gt
from pprint import pprint as pp

def data_extract(funcs, keys, table):
    assert len(funcs) == len(keys) == len(table[0]), \
           'Error: incompatable data sizes'
    # substitutes for *first* param
    pfuncs = [partial(f, k) for f, k in zip(funcs, keys)] 
    return [row for row in table 
            if all(p(value) 
                   for p, value in zip(pfuncs, row))]

def skip(a, b):
    return True

tbl = [[1, 2, 3],
       [2, 3, 4],
       [4, 6, 8],
       [10, 12, 14],
       # ... millions
       ]

fn = [ge, le, skip]
ks = [12, 6, None]

ans = data_extract(fn, ks, tbl)
pp(ans)  # [[4, 6, 8], [10, 12, 14]]

希望以上是对您问题的正确解释。如果每次调用函数时funcs和/或keys都会发生变化,我就无法理解如何使用dict来提供帮助。

skip只是表明该表格中的数据是“不关心”的一种方式。