在列表中查找低于或等于值的项目
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]
我有一个包含多列的已排序 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]