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 来管理这些数据吗?他们有有效的算法来处理这些类型的查询。
我有一个很长(数百万)的交易列表,格式为 [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 来管理这些数据吗?他们有有效的算法来处理这些类型的查询。