Python在列表或数组中查找n个在min和max之间等距的值

2024-04-24 09:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个按升序排列的浮点值列表。我想在列表中找到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中找到最接近的值。另外,我想知道他们的指数位置。你知道吗

我期待以下输出:

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

Tags: 列表valresultfind指数minmaxlist
1条回答
网友
1楼 · 发布于 2024-04-24 09:34:14

所以这里有一个函数来做它,它排除了列表中的最小值和最大值:

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])], indexed_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()

相关问题 更多 >