1

我有一个列表(Let A),其中包含对象列表,每个对象都包含属性say nameid并且id值存储在数据库中。在特定位置,我有ID列表(Let B)现在我想要列表'A'中的那些对象在列表“B”中有 ID。
通过使用简单的迭代,我可以从列表 A 中获取这些对象。(这可能会导致更多的迭代)我想减少迭代,因为我的两个列表中的每个列表都有超过 1000 个值

for clildB in B:
            for childA in A:
                #   MYCODE
4

2 回答 2

3

要将您的 O(n*m)(二次)代码转换为 O(n+m)(线性):

ids = set(B)
L = [obj for obj in A if obj.id in ids]

item in a_set操作具有 O(1)(常数)时间复杂度(平均情况),其中a_set是一个集合。将其与item in a_list具有 O(n) 时间复杂度的情况进行比较,其中a_list是一个列表。

于 2013-07-25T10:52:03.727 回答
0
idADic = {o['id']:o for o in A}
[idADic.get(o['id']) for o in B]
于 2013-07-25T10:50:34.153 回答