需要检查值是否在列表中的两个数字之间

时间:2019-04-28 23:47:18

标签: python

我的python脚本[79.99, 82.99, 83.99, 84.99, 85.99, 86.99, 87.99, 88.99, 89.99]中有一个列表,循环中的数字越来越多。我想创建一个条件,以便当该数字达到这些范围之一之间的数字时,它将采用该范围的较小数字并对其进行处理。

例如while (i!=10000): i=+1if i between range(above_range): print(low_Range_number)

如果该数字为81.99,则它将选择79.99 如果数字为84.23,则选择83.99

3 个答案:

答案 0 :(得分:3)

这就是bisect stdlib模块的用途。

import bisect

entries = [79.99, 82.99, 83.99, 84.99, 85.99, 86.99, 87.99, 88.99, 89.99]
x = 81.5

def get_lower_bound(haystack, needle):
    """Get lower bound between two numbers in a sorted list

    If needle is lower than the lower bound, or higher than the higher bound of
    the sorted list, then raise ValueError.

    >>> get_lower_bound([1,2,3], 1.5)
    1
    >>> get_lower_bound([1,2,3], 2)
    2
    >>> get_lower_bound([1,2,3], 0)
    Traceback (most recent call last):
    ...
    ValueError: 0 is out of bounds of [1, 2, 3]
    >>> get_lower_bound([1,2,3], 4)
    Traceback (most recent call last):
    ...
    ValueError: 4 is out of bounds of [1, 2, 3]
    """

    idx = bisect.bisect(haystack, needle)
    if idx > 0 and idx < len(haystack):
        return haystack[idx-1]
    else:
        raise ValueError(f"{needle} is out of bounds of {haystack}")

答案 1 :(得分:1)

您的列表似乎已排序,所以:

def lower_bound(x, l):
    if not l or l[0] > x:
        return
    for i, y in enumerate(l):
        if y > x:
            return l[i - 1]

如果没有任何内容可以满足您的搜索要求,它将返回None。如果未排序,请先致电l.sort()

答案 2 :(得分:1)

您将值添加到列表中,对其进行排序,找到值的索引,然后询问上一个(最后删除您的值):

a = [79.99, 82.99, 83.99, 84.99, 85.99, 86.99, 87.99, 88.99, 89.99]
limit = len(a)
for i in range(0, 10000):
    a.append(i)
    a.sort()
    ix = a.index(i)
    if ix > 0 and ix <= limit: print(a[ix-1])
    a.remove(i)