python select 子列表有效

python select sublist effectively

我有一个很长(数百万)的交易列表,格式为 [account_id,transactiontyp,data],每个账户都有很多交易。我想 select 给定短列表(大约 20000 个)帐户的所有交易。示例:

longlist=[['a','t1',5],['a','t1',9],['b','t1',3],['c','t5',8]]

shortlist=['a','c']

以下代码可以解决问题,但速度极慢:

selection=[sel for sel in longlist if sel[0] in shortlist]

一定有更快的方法来实现吗?我试过了

def select_sample(longlist,shortlist):
    ret=[]
    for elem in longlist:
        if elem[0] in shortlist:
            ret.append(elem)
    return ret

看看它是如何扩展的,正如预期的那样,它与 longlist 的大小成线性关系。 长名单按 account_id 排序。我在 longlist 中没有使用字典的唯一键。 是否有类似索引技术的东西,我可以使用?

使用 set (shortlist = set(['a', 'c']) 将在 20 个帐户左右实现收支平衡。如果 shortlist 有 20k 个帐户,我希望它至少快 2 倍。

如果此选择重复多次,您 甚至 通过使用将帐户名称映射到该特定帐户的交易列表的字典,您会受益更多。


然而,总而言之,这听起来像是一个 XY 问题。您确定应该使用 RDBMS 来管理这些数据吗?他们有有效的算法来处理这些类型的查询。