gpt4 book ai didi

python - 当我们循环遍历所有元素时保留前 N 个元素

转载 作者:太空宇宙 更新时间:2023-11-03 16:54:50 25 4
gpt4 key购买 nike

这就是我正在尝试做的事情。数据帧计算的输出给出一个数字。我使用该数字对不同的数据帧进行排名,并且需要保留前 N 个(在下面的示例中,选择前 10 个)。通过将数字与反向排序列表的最后一个数字进行比较来实现排名。如果当前数字较大,则弹出列表并将新条目添加到列表中,然后再次反向排序。以下内容在结构上与我所拥有的相同,并且它可以工作,尽管速度很慢。如果有任何关于提高其速度、效率或 Python 风格的建议,我将不胜感激。

import random
import pandas as pd

def gen_df():
return random.uniform(0.0, 1.0), pd.DataFrame()

if __name__ == '__main__':
mylist = []
for i in range(1000):
val, df = gen_df()
if len(mylist) < 10:
mylist.append((val, df))
else:
mylist.sort(reverse=True)
if mylist[-1][0] < val:
mylist.pop()
mylist.append((val, df))

编辑:根据 zondo 的建议减少了一种排序。

最佳答案

加快速度的方法是将列表替换为大小为 10 的最小堆。将前 10 帧放入堆中。然后,对于每个项目,如果它比堆上最小的项目大,则弹出最小的项目并推送新项目。

我不是 Python 程序员,所以我将展示伪代码。

heap = new min-heap
for each item
if (heap.length < 10)
heap.push(item)
else if (item > heap.peek())
heap.pop(); // remove smallest item
heap.push(item); // add new item

当然,这假设有一个可以使用的最小堆实现。我怀疑heapq就可以了。

这比每次插入新项目时对列表进行排序要快得多。

关于python - 当我们循环遍历所有元素时保留前 N 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35505450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com