做网站怎么上词/广东病毒感染最新消息
我需要在Python中得到一个列表的较小的n个数。我需要这个非常快,因为它是性能的关键部分,需要重复很多次。在
n通常不大于10,并且列表通常有大约20000个元素。每次调用的函数总是不同的。无法就地进行排序。在
最初,我编写了以下函数:def mins(items, n):
mins = [float('inf')]*n
for item in items:
for i, min in enumerate(mins):
if item < min:
mins.insert(i, item)
mins.pop()
break
return mins
但是这个函数不能打败一个简单的sorted(items)[:n],它对整个列表进行排序。这是我的测试:
^{pr2}$
结果:mins(items, n): 0.0632939338684
sorted(items)[:n]: 0.0231449604034
sorted()[:n]快三倍。我认为这是因为:insert()操作代价高昂,因为Python列表不是链接列表。在
sorted()是一个优化的c函数,我的是纯python函数。在
有没有办法打败sorted()[:n]?
我应该使用C扩展,还是Pyrex或Psyco之类的?在
提前感谢您的回答。在