在列表中找到所有元素之间绝对差值最小的两个元素

Finding the two elements in a list that give the minimum absolute difference among all elements

假设我有一个列表:l=[7,2,20,9],我不想找到其中所有元素之间的最小绝对差(在这种情况下,它将是 9-7 = 2 或等效的 |7-9 |).要在 nlogn 复杂度中做到这一点,我需要进行排序、取差并找到最小元素:

import numpy as np
sorted_l = sorted(l) # sort list
diff_sorted = abs(np.diff(sorted_l)) # get absolute value differences
min_diff = min(diff_sorted) # get min element

但是,执行此操作后,我需要跟踪在原始 l 列表中使用了哪些元素导致了这种差异。所以对于 l 最小差异是 2,我需要的输出是 7 和 9,因为 9-7 是 2。有没有办法做到这一点? sorted 方法破坏了顺序并且很难回溯。我错过了一些明显的东西吗?谢谢。

使用:

index = diff_sorted.tolist().index(min_diff)
sorted_l[index:index+2]

输出

[7, 9]

整个脚本

import numpy as np
l=[12,24,36,35,7]
sorted_l = sorted(l)
diff_sorted = np.diff(sorted_l)
min_diff = min(diff_sorted)
index = diff_sorted.tolist().index(min_diff)
sorted_l[index:index+2]

输出

[35, 36]

说明

tolist 正在将 numpy 数组转换为一个列表,其函数包含一个 index,它为您提供输入参数的索引。因此,使用 tolistindex 函数,我们得到排序数组中最小值的索引。使用这个索引,我们得到两个数字,导致最小差异([index:index+2] 在排序数组中选择两个数字)