如何检查一个号码与另一个号码的接近程度?

2024-09-27 04:19:03 发布

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

我有一个文本文件,看起来像:

John: 27
Micheal8483: 160
Mary Smith: 57
Adam 22: 68
Patty: 55

等等,他们是用户名,这就是为什么他们的名字偶尔包含数字。我要做的是检查它们的每个数字(在“:”之后的数字),并得到3个名称,它们的数字值与整数最接近(具体地说是targetNum)。它将永远是积极的。你知道吗

我尝试了很多方法,但我对Python还不太熟悉,我不确定如何解决这个问题。感谢您的帮助!你知道吗


Tags: 方法名称数字整数名字john用户名smith
2条回答

你可以在这里使用一些正则表达式:

import re

pattern=r'(\w.+)?:\s(\d+)'
data_1=[]
targetNum = 50
with open('new_file.txt','r') as f:
    for line in f:
        data=re.findall(pattern,line)
        for i in data:
            data_1.append((int(i[1])-targetNum,i[0]))

print(list(map(lambda x:x[1],data_1[-3:])))

输出:

['Mary Smith', 'Adam 22', 'Patty']

您可以将文件解析为名称/数字对的列表。然后sort通过数字和targetNum之间的差来列出列表。列表的前三项将包含所需的名称:

users = []

with open("file.txt") as f:
    for line in f:
        name, num = line.split(":")
        users.append((name, int(num)))

targetNum = 50
users.sort(key=lambda pair: abs(pair[1] - targetNum))
print([pair[0] for pair in users[:3]])  # ['Patty', 'Mary Smith', 'Adam 22']

相关问题 更多 >

    热门问题