首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python在列表或数组中查找n个数个介于min和max之间的等距值

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

Stack Overflow用户
提问于 2019-07-31 00:10:21
回答 1查看 539关注 0票数 0

我有一个按升序排列的浮点值列表。我想在这个列表中找到m个等距离的值和它们的索引。

代码语言:javascript
复制
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个最小和最大之间的等距值。另外,我想找出他们的索引位置。

代码语言:javascript
复制
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中找到最接近的值。另外,我想知道他们的索引位置。

我期望得到以下输出:

代码语言:javascript
复制
result_list = [6.2,   9.5,   12.1,  16.3]
result_idx = [5, 8, 10, 12]
EN

回答 1

Stack Overflow用户

发布于 2019-07-31 01:56:07

下面是一个函数,它排除了列表中的最小值和最大值:

代码语言:javascript
复制
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索引。

如下所示使用函数:

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57275866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档