3 回答
TA贡献1812条经验 获得超5个赞
假设“pk”代表“主键”(唯一),那么您可以只使用 dict(具有O(1)成员资格)而不是使用此类对象的列表(具有O(n)成员资格)
objects = [Demo(x) for x in range(10)] # O(n) space
result = [next(obj for obj in objects if obj.pk == ordinal] for ordinal in ordinality) # O(n^2) time
objects = {x: Demo(x) for x in range(10)} # O(n) space
result = [objects[pk] for pk in ordinal] # O(n) time
TA贡献1963条经验 获得超6个赞
首先建立一个查找表,然后使用它。把你的 O(n 2 ) 变成 O(n)。
lookup = {obj.pk: obj for obj in objects}
result = [lookup[ordinal] for ordinal in ordinality)
TA贡献2080条经验 获得超4个赞
您可以只使用序数来创建对象。因为序数是你想要开始的顺序。
ordinality = [9, 0, 8, 4, 5, 1, 3, 7, 6, 2]
objects = list(map(Demo, ordinality))
#or
objects = [Demo(pk) for pk in ordinality]
添加回答
举报