首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中查找最接近特定值的列表项目

在Python中查找最接近特定值的列表项目
EN

Stack Overflow用户
提问于 2014-05-19 23:25:57
回答 3查看 893关注 0票数 3

我有一个已排序浮点数y的列表,以及一个未排序浮点数x的列表。

现在,我需要为x中的每个元素找出它位于y的哪个值之间,最好是通过y的索引。例如,如果

代码语言:javascript
复制
y=[1,2,3,4,5]

x[0]=3.5 

我需要x的索引0的输出为(2,3),因为3.5y[2]y[3]之间。

基本上,我想这等同于将y看作仓位边,并将x排序到这些仓位。

完成这个任务最简单的方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2014-05-19 23:30:11

我将使用zip (Python2.x中的itertools.izip)来完成此操作:

代码语言:javascript
复制
from itertools import islice#, izip as zip # if Python 2.x

def nearest_neighbours(x, lst):
    for l1, l2 in zip(lst, islice(lst, 1, None)):
        if l1 <= x <= l2:
            return l1, l2
    else:
        # ?

示例用法:

代码语言:javascript
复制
>>> nearest_neighbours(3.5, range(1, 6))
(3, 4)

你必须决定如果x不在lst中的任何对之间,你想要发生什么(例如,替换# ?!)如果您想要索引(尽管您的示例没有使用它们),可以尝试使用enumerate

票数 6
EN

Stack Overflow用户

发布于 2014-05-23 21:31:13

谢谢--我知道如何一步一步地编写代码。然而,我一直在寻找一个漂亮/容易/优雅的解决方案,现在我正在使用numpy.digitize(),它对我来说看起来很漂亮,而且工作得很好。

票数 1
EN

Stack Overflow用户

发布于 2014-05-21 22:22:16

问:实现这一目标最简单的方法是什么?

我认为你应该看到这个伪代码,而不是给你代码,试着写你自己的代码!如果你想自学,不要仅仅从互联网上复制粘贴代码!

伪码:

代码语言:javascript
复制
// Assume that when you have a tie,
// you put the number in the smallest range
// Here, b is between 2.1 and 3.5, instead of
// 3.5 and 4.1
float a[5] = {0.1, 1.1, 2.1, 3.5, 4.1}; // your y
float b = 3.5;                          // your x

// counter for the loop and indexes. Init i to second element
integer i = 1, prev = -1, next;

// while we are not in the end of the array
while(i < 5) {
    // if b is in the range of ( a(i-1), a(i) ]
    if(b <= a[i] && b > a[i - 1]) {
    // mark the indexes
        prev = i - 1;
        next = i;
    }

    // go to next element
    i++;
}

if(prev = -1)
    print "Number is not between some numbers"
else
    print "prev, next"

我认为这可以让你理解这一点,然后能够为你选择最简单的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23741576

复制
相关文章

相似问题

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