如果每个数字旁边都有一个字符串,如何使用此代码查找文件中的前5个最大数字?

2024-10-02 22:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

from heapq import nlargest

with open("winnernum.txt", "r") as f:
   numbers = [float(line.rstrip()) for line in f.readlines()]
   largest = nlargest(5, numbers)    
print(largest)

我已经测试了这个代码,如果每个数字旁边没有字符串,它就可以工作,因为我假设不能将字符串转换成浮点。字符串在那里是因为每个高分旁边都有一个用户名。该计划应打印出获胜者的名字和他们的得分前5名得分最高的球员。你知道吗


Tags: 字符串fromimporttxtaswithlineopen
2条回答

如果测试.txt是

green 12
blue 13
red 14
yellow 15
hello 16
green1 122
blue1 132
red1 142
yellow1 152
hello1 162
green2 121
blue2 131
red2 141
yellow2 151
hello2 161

代码:

from heapq import nlargest
with open("test.txt",'r')as f:
    c={}
    for l in f:
        c[l.split("]")[0]]=(float(l.split("]")[1]))
    largest=nlargest(5,list(c.values()))
    print(c)
    print(largest)
    for x in largest:
        for i in c:
            if c[i] == x:
                print(i[1:],x)

输出:

{'green': 12.0, 'blue': 13.0, 'red': 14.0, 'yellow': 15.0, 'hello': 16.0, 'green1': 122.0, 'blue1': 132.0, 'red1': 142.0, 'yellow1': 152.0, 'hello1': 162.0, 'green2': 121.0, 'blue2': 131.0, 'red2': 141.0, 'yellow2': 151.0, 'hello2': 161.0}
[162.0, 161.0, 152.0, 151.0, 142.0]
hello1 162
hello2 161
yellow1 152
yellow2 151
red1 142

如果输入看起来像注释中描述的那样,则为运行示例:

from heapq import nlargest

test_str = """ ['katy'] 30
['max'] 45
['A'] 31
['B'] 4
['D'] 1
['C'] 15
['E'] 333"""

numbers = [float(line.rstrip().split("]")[1]) for line in test_str.split("\n")]
largest = nlargest(5, numbers)
print(largest)

在您的情况下,您可以这样做:

from heapq import nlargest

with open("winnernum.txt", "r") as f:
   numbers = [float(line.rstrip().split("]")[1]) for line in f.readlines()]
   largest = nlargest(5, numbers)    
print(largest)

编辑

避免空行或不带“]”的行

numbers = []
with open("winnernum.txt", "r") as f:
    for line in f.readlines():
        split = line.rstrip().split("]")
        if len(split) > 1:
            numbers.append(float(split[1]))

相关问题 更多 >