如何使用 lopps 找到给定值的一对搜索值?

5 python tuples list

我正在尝试编写一个函数,该函数获取一个数字列表和一个整数,并返回一个元组,该元组包含列表中的一对数字,其总和必须最接近函数接收到的数字。例如:closest([10,22,28,29,30,40], 54) --> (22,30) 对我来说在循环和 O(n) 的时间复杂度中执行此操作很重要。我的代码的问题是循环不想为我从列表开头获取的任何值重新运行列表结尾......我很感激帮助:) 感谢帮助者!

def closest(lst, x):
    max_num = 0
    cur = lst[0]
    final = 0
    my_tup = ()
    for num in lst[::-1]:
        max_num = cur + num
        if max_num <= x:
            if max_num > final:
                final = max_num
                my_tup = (cur, num)
            else:
                cur = lst[1]

    return my_tup

print(closest([10,22,28,29,30,40], 54))  ---> return: (22,29)
Run Code Online (Sandbox Code Playgroud)

小智 0

如果您给出的列表已排序并且元素是唯一的,您可以使用它。否则我相信您可以对字典实施一些条件并获取您想要的值。

my_dict = {i+j:(i,j) for i in mylist for j in mylist if i != j and i + j < bound} my_dict[max(t)]