我有一个按升序排列的浮点值列表。我想在这个列表中找到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]发布于 2019-07-31 01:56:07
下面是一个函数,它排除了列表中的最小值和最大值:
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]
我们映射以将索引列表中的每个元素转换为它与我们试图查找的值之间的绝对差异。然后我们找到列表的最小值(最接近的元素)。由于我们将索引附加到每个元素(基于它在主列表中的位置),因此我们可以在主列表中查找实际值(因为它刚刚用map进行了转换)。这就是我们在结束时返回时发生的事情。我们也可以直接返回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()https://stackoverflow.com/questions/57275866
复制相似问题