我有一个包含多列的排序 csv 文件,我想返回第 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]))
现在是棘手的部分,因为我找不到合适的函数和/或正在寻找更低或相等值的示例。我尝试编辑我在 stackoverflow.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 时,它应该返回return1=124
or 索引。当值不包括在内时 value2 它应该返回低于搜索值的最大值。return2=125
即使较高的值 128 更接近。
我尝试使用 bisect 模块,但我失败了。任何小费表示赞赏。
问候