Python查找列表或数组中最小值和最大值之间的n个等距值

Python查找列表或数组中最小值和最大值之间的n个等距值,python,list,dataframe,Python,List,Dataframe,我有一个按升序排列的浮点值列表。我想在列表中找到m个等距值及其索引 list = [2,3,3.2,3.5,4.1, 6.2, 7.3, 8.4, 9.5, 10.6, 12.1, 14.2, 16.3, 18.4, 20] 我想在上面的列表中找到4个最小值和最大值之间的等距值。另外,我想找到它们的索引位置 min = 2 max = 20 dif = 20-2 = 18 find_val = [2+1*(18/5), 2+2*(18/5), 2+3*(18/5), 2+4*(

我有一个按升序排列的浮点值列表。我想在列表中找到m个等距值及其索引

list = [2,3,3.2,3.5,4.1, 6.2, 7.3, 8.4, 9.5, 10.6, 12.1, 14.2, 16.3, 18.4, 20]
我想在上面的列表中找到4个最小值和最大值之间的等距值。另外,我想找到它们的索引位置

min = 2
max = 20    
dif = 20-2 = 18    
find_val = [2+1*(18/5), 2+2*(18/5), 2+3*(18/5), 2+4*(18/5)]
find_val = [5.6,         9.2,         12.8,          16.4]
我想在
find_val
中找到最接近的值。另外,我想知道他们的指数位置

min = 2
max = 20    
dif = 20-2 = 18    
find_val = [2+1*(18/5), 2+2*(18/5), 2+3*(18/5), 2+4*(18/5)]
find_val = [5.6,         9.2,         12.8,          16.4]
我期望得到以下结果:

result_list = [6.2,   9.5,   12.1,  16.3]
result_idx = [5, 8, 10, 12]

因此,这里有一个函数用于执行此操作,该函数不包括列表中的最小值和最大值:

def find_n_equidistant(n, in_list):
    min_n = min(in_list)
    max_n = max_n(in_list)
    find_vals = [min_n+x*((max_n - min_n)/(n+1)) for x in range(1,n+1)]
    out_indexes = [] # the indexes of the closest elements
    for value in find_vals:
        out_indexes.append(min(map(lambda x: [x[0], abs(value-x[1])], enumerate(in_list)), key=lambda x: x[1])[0])
    return [in_list[index] for index in out_indexes], out_indexes
此函数的主要内容是
min(map(lambda x:[x[0],abs(value-x[1])),index_list),key=lambda x:x[1])[0]

我们通过映射将索引列表的每个元素转换为它与我们试图找到的值之间的绝对差值。然后我们找到列表的最小值(最接近的元素)。因为我们将索引附加到每个元素(基于它在主列表中的位置),所以我们可以在主列表中查找实际值(因为它刚刚使用映射进行了转换)。这就是我们在最后返回时发生的情况。我们还可以直接返回out索引

使用如下函数:

values, indexes = find_n_equidistant(4, in_list) # reminder that its bad practice to name lists `list` because it causes issues with the default function list()

如果AppliebleQuestion更新,请提供预期输出和实际输出。谢谢,你可以重复使用上一个值,当您达到或超过
find_val
中的一个时,请检查上一个值和find_val之间的距离是否大于当前值和find_val之间的距离,并生成相应的值及其索引。是否有比我上面所做的需要多行代码的方法更好的方法?我觉得,我的方法看起来像是手动方法,而不是算法。你的方法似乎假设输入由等距数字组成。这是已知的情况吗?输入列表是否可以是
[1,2,3,410000000000]
?这些数字应该是等距的,还是它们的索引应该是等距的?