假设我有一个列表:l=[7,2,20,9]
和我不想在所有元素之间找到最小的绝对差(在这种情况下,它将是9-7 =2,或者等效地是x=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
方法破坏了顺序,很难回溯。我漏掉了什么明显的东西吗?谢谢。
发布于 2022-03-16 16:52:02
使用:
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
函数的列表,该列表为输入参数提供索引。因此,利用tolist
和index
函数,我们得到排序数组中最小值的索引。使用该索引,我们得到两个数字,从而得到最小差(index:index+2是在排序数组中选择两个数字)。
https://stackoverflow.com/questions/71501021
复制相似问题