我的python脚本[79.99, 82.99, 83.99, 84.99, 85.99, 86.99, 87.99, 88.99, 89.99]
中有一个列表,循环中的数字越来越多。我想创建一个条件,以便当该数字达到这些范围之一之间的数字时,它将采用该范围的较小数字并对其进行处理。
例如while (i!=10000): i=+1
和if i between range(above_range): print(low_Range_number)
如果该数字为81.99,则它将选择79.99 如果数字为84.23,则选择83.99
答案 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)