我有一个文件,里面有我正在循环的值。该文件由两列组成,分别具有x和y值。我将x和y值添加到一个列表中
example_list = []
for line in f:
example_list.append([line.split()[0], line.split()[1]])
但是,我希望列表最大长度为15个列表,只保留line.split()[1]
中的最高值。有两种方法
example_list = []
for line in f:
example_list.append([line.split()[0], line.split()[1]])
top_15 = example_list.sort(key=operator.itemgetter(1), reverse=True)[:15]
或者
example_list = []
count = 0
for line in f:
if count < 15:
example_list.append([line.split()[0], line.split()[1]])
count += 1
else:
example_list.sort(key=operator.itemgetter(1))
if example_list[0][1] < line.split()[1]:
example_list[0] = line.split()[1]
但是,我不想在内存中读取整个文件,也不想为每一行调用sort
。有什么更好的方法来保持列表的排序,以便只添加新元素来替换列表中最低的元素?你知道吗
您正在寻找^{} module ;堆可以让您高效地保存前N项。甚至有一个专门的函数用于您的具体用例:
这将传入生成器表达式,有效地处理循环。你知道吗
在引擎盖下,此方法:
相关问题 更多 >
编程相关推荐