【发布时间】:2010-06-08 01:35:12
【问题描述】:
假设我有一个对象列表。 (现在全部放在一起:“我有一个对象列表。”)在我正在编写的 Web 应用程序中,每次收到请求时,我都会根据未指定的标准挑选其中一个对象并使用它来处理要求。基本上是这样的:
def handle_request(req):
for h in handlers:
if h.handles(req):
return h
return None
假设列表中对象的顺序并不重要,我可以通过保持列表排序以使最常用(或最近使用)的对象位于最前面,从而减少不必要的迭代。我知道这没什么好担心的——它只会在应用程序的执行时间上产生微小的、无法察觉的差异——但是调试其余代码让我发疯,我需要分散注意力:) 所以我出于好奇问:按照每个处理程序被选择的次数降序排列,维护列表的最有效方法是什么?
显而易见的解决方案是使handlers 成为(count, handler) 对的列表,每次选择处理程序时,增加计数并重新排列列表。
def handle_request(req):
for h in handlers[:]:
if h[1].handles(req):
h[0] += 1
handlers.sort(reverse=True)
return h[1]
return None
但由于最多只会有一个元素乱序,而且我知道它是哪一个,因此似乎应该可以进行某种优化。标准库中是否有一些东西特别适合这项任务?还是其他一些数据结构? (即使它没有在 Python 中实现)或者我应该/可以做一些完全不同的事情吗?
【问题讨论】:
标签: python optimization sorting list