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]
添加回答
舉報