【发布时间】:2016-02-19 12:31:46
【问题描述】:
这就是我想要做的。数据帧上的计算输出给出了一个数字。我使用该数字对不同的数据帧进行排名,并且我需要保留前 N 个(在下面的示例中,选择了前 10 个)。排名是通过将数字与反向排序列表的最后一个数字进行比较来实现的。如果当前数字较大,则弹出列表并将新条目添加到列表中,然后再次反向排序。以下在结构上与我所拥有的相同,并且可以正常工作,尽管速度很慢。我将不胜感激任何提高其速度、效率或 Pythonicness 的建议。
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 的建议减少了一种。
【问题讨论】:
-
一方面,我认为您不需要每次都对其进行排序。只需在你说
mylist.pop()之前对其进行排序,并在完成后在循环外对其进行排序。 -
对此我不确定。我正在将当前值与前 10 名中的最低值进行比较。如果没有排序列表,我将需要更多逻辑。
-
是的,我可以在 else 之后用一个替换这两种类型:
标签: python sorting data-structures