【问题标题】:Returning the other value of the pair from a tuple, which has closest value to certain number [closed]从元组中返回该对的另一个值,该值与某个数字最接近[关闭]
【发布时间】:2021-11-18 13:04:58
【问题描述】:

我有一个listtuples 是这样的:

[(78, 10), (84, 11), (75, 12), (78, 13), (75, 14), (77, 15), (79, 16), (81, 17), (83, 18), (85, 19)]

如果tuples 中的第一个数字最接近/等于某个数字,我该怎么做,从该元组返回另一个对值?

例如在上面的列表中:

某个数字:79 那么它应该从上面的列表中返回 16。

谢谢!

【问题讨论】:

  • 你能证明自己任何努力解决这个问题吗?
  • 我可以将值与列表进行比较并返回最接近的值,如下所示:print (min(my_list, key=lambda x: abs(x - certainvalue) 但由于这是单个值,我不知道如何从元组中将值与某个值进行比较,然后返回对值
  • 如果数字是 78 怎么办?如果是 82 怎么办?
  • 这只是一个例子,我只是想找到一种方法将第一个值从元组中分离出来,与某个值进行比较,然后从元组中返回另一个值
  • 找不到相等时确定最接近的逻辑是什么?

标签: python tuples


【解决方案1】:

你有几个选择。

方法一:

遍历列表并检查最小的差异。

def return_closest_pair(data: list, target: int) -> int:
    closest, other = data[0]
    closest_diff = abs(closest - target)
    rest = iter(data[1:])
    for left, right in rest:
        diff = abs(left - target)
        if diff < closest_diff:
            closest, other = left, right
    return other

>>> return_closest_pair(data, 79)

方法二:

min 函数编写一个自定义键,就像您最初尝试的那样。

def find_closest_to(target):
    def comp(tup):
        left, right = tup
        return abs(left - target)
    return comp

>>> min(data, key=find_closest_to(79))[0]
16

【讨论】:

    【解决方案2】:

    试试这个解决方案:

    l = [(78, 10), (84, 11), (75, 12), (78, 13), (75, 14), (77, 15), (79, 16), (81, 17), (83, 18), (85, 19)]
    n = 79
    diff = 10**6
    ans = 0
    for i in l:
        if abs(n-i[0])< diff:
            diff = abs(n-i[0])
            ans = i[1]
            
    print(ans)
            
    

    输出:

    16
    

    【讨论】:

    • 谢谢大佬,你能解释一下diff = 10**6是什么吗?
    猜你喜欢
    • 2014-07-27
    • 2022-11-19
    • 2020-05-12
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2014-09-16
    • 2021-02-11
    相关资源
    最近更新 更多