【问题标题】:How to check how close a number is to another number?如何检查一个数字与另一个数字的接近程度?
【发布时间】:2018-01-04 15:17:07
【问题描述】:

我有一个看起来像这样的文本文件:

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

等等等等。他们是用户名,这就是他们的名字偶尔包含数字的原因。我想要做的是检查它们的每个数字(“:”之后的数字)并获取 3 个名称,这些名称的数字值最接近整数(具体命名为 targetNum)。它永远是积极的。

我尝试了多种方法,但我是 Python 新手,我不确定如何解决这个问题。任何帮助表示赞赏!

【问题讨论】:

  • 你尝试过哪些多种方法?
  • 检查两个数字的接近程度通常通过减法来完成。
  • 数字是唯一的吗?
  • @EugeneYarmash 是的

标签: python string python-3.x integer compare


【解决方案1】:

您可以将文件解析为名称/数字对列表。然后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']

【讨论】:

    【解决方案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']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多