如何用python排序并只输出前几个_我该如何对一百万个数字进行排序,并且仅在Python中打印前十个数字?...

这篇博客讨论了如何在Python中对包含一百万个数字的文件进行排序,以找到并打印前十个最大值,而不必将整个列表存储在内存中。博主分享了一种使用选择排序的解决方案,但指出这不是最佳方法。评论区提供了更高效的解决方案,如使用heapq.nlargest函数或选择算法,这些方法在处理大文件时能以线性时间复杂度O(n)找到前k个最大值。
摘要由CSDN通过智能技术生成

我有一个包含一百万个数字的文件。 我需要知道如何有效地对其进行排序,以免使计算机停滞不前,并且仅打印前十名。

#!/usr/bin/python3

#Find the 10 largest integers

#Don't store the whole list

import sys

def fOpen(fname):

try:

fd = open(fname,"r")

except:

print("Couldn't open file.")

sys.exit(0)

all = fd.read().splitlines()

fd.close()

return all

words = fOpen(sys.argv[1])

big = 0

g = len(words)

count = 10

for i in range(0,g-1):

pos = i

for j in range(i+1,g):

if words[j] > words[pos]:

pos = j

if pos != i:

words[i],words[pos] = words[pos],words[i]

count -= 1

if count == 0:

print(words[0:10])

我知道这是选择排序,我不确定什么是最好的排序。

这是作业吗? 还是一本书中的练习?

它的功课..

这显然是一个XY问题。 问题不是排序,而是找到十个最大的整数。 尽管可以通过首先排序然后选择前十个条目来找到它们,但这并不是最佳解决方案。 最好的解决方案是百事可乐提供的解决方案。

我不会说百事可乐的解决方案是"最好的",也许是第一个现有的解决方案。 实际上,他实际上没有提供任何有效的代码,但确实表明这是一个XY问题。

如果只需要前10个值,那么您将浪费大量时间对每个数字进行排序。

只需浏览数字列表,并跟踪到目前为止看到的前10个最大值。在浏览列表时更新前十名,并在到达末尾时将其打印出来。

这意味着您只需要对文件进行一次遍历(即theta(n)的时间复杂度)

一个更简单的问题

您可以将您的问题看成是在数字列表中找到最大值的概括。如果给出{2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值