在列表中查找低于或等于值的项目

Find Item lower or equal to value in list

我有一个包含多列的已排序 csv 文件,我想 return 第 1 列中某个项目的值或索引。这个 csv 文件有大约 300.000 到 400.000 个值,所以我正在尝试避免任何 min 函数,因为它可能需要很长时间,我需要不到一秒的值。

所以我正在做的是通过以下方式将 column1 的条目添加到列表中:

with open('example.csv', 'r') as f:
     reader = csv.reader(f, delimiter=';')
     for row in reader:
         array.append(int(row[0])) 

现在是棘手的部分,因为我找不到合适的函数 and/or 正在寻找更低或相等值的示例。 我尝试编辑在 whosebug.com

上找到的这个示例
def find_closest(t):
 idx = bisect.bisect_left(array, t) # Find insertion point

# Check which timestamp with idx or idx - 1 is closer
 if idx > 0 and abs(array[idx] - value) > abs(array[idx - 1] - value):
     idx -= 1

 return array[idx]

这个例子给出了最接近的值,更低、等于或更大。但是我无法按照我想要的方式更改它。

以数字为例,我要查找的是:

array=[123,123,123,124,125,125,125,128,128,128,128]
value1=124
value2=127

所以在查找 value1 时,它应该 return return1=124 或索引。 当该值不像 value2 那样包含在内时,它应该 return 低于搜索值的最高值。 return2=125即使较高的值 128 更接近。

我尝试使用 bisect 模块,但我惨遭失败。感谢任何小费。

问候

这是假设您有一个排序列表:

def foo(the_list, value):
    index = bisect.bisect_left(the_list, value)
    return the_list[index] if the_list[index] == value or index == 0 else the_list[index-1]