在列表

时间:2016-04-13 18:54:08

标签: python csv bisect

我有一个有多列的已排序的csv文件,我想返回第1列中项目的值或索引。这个csv文件有大约300.000到400.000的值,所以我试图避免任何{{ 1}}函数,因为它可能需要很长时间,我需要在一秒钟内的值。

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

min

现在是棘手的部分,因为我找不到合适的功能和/或寻找更低或相等价值的例子。 我尝试编辑我在stackoverflow.com上找到的这个例子

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

此示例给出最接近的值,更低,相等或更大。但我无法按照自己的方式改变它。

作为一个数字的例子,我正在寻找的是:

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]

因此,在查找value1时,它应该返回array=[123,123,123,124,125,125,125,128,128,128,128] value1=124 value2=127 或索引。 如果值不包含在值2中,则应返回低于搜索值的最高值。 return1=124即使较高的值128更接近。

我尝试使用bisect模块,但我失败了。任何tipps都很受欢迎。

问候

0 个答案:

没有答案