【发布时间】:2019-04-19 11:21:17
【问题描述】:
有一个包含 N 个(大量)元素的列表:
from random import randint
eles = [randint(0, 10) for i in range(3000000)]
我正在尝试在下面实现此功能的最佳方式(性能/资源花费):
def mosty(lst):
sort = sorted((v, k) for k, v in enumerate(lst))
count, maxi, last_ele, idxs = 0, 0, None, []
for ele, idx in sort:
if(last_ele != ele):
count = 1
idxs = []
idxs.append(idx)
if(last_ele == ele):
count += 1
if(maxi < count):
results = (ele, count, idxs)
maxi = count
last_ele = ele
return results
此函数返回最常见的元素、出现次数以及找到它的索引。
这里是benchmark 300000 eles。
但我认为我可以改进,原因之一是 python3 sorted 函数 (timsort),如果它返回一个生成器,我不必循环遍历列表两次,对吧?
我的问题是:
有什么办法可以优化这段代码吗?怎么样?
我肯定会使用惰性排序,对吗?如何实现惰性 timsort
【问题讨论】:
-
试试这个地方是否可以使用生成器。
-
该函数到底想做什么?
-
你当然可以改进你的实现,但我认为惰性排序的想法不是这样做的正确方法
标签: python python-3.x performance sorting