我有以下代码获取两个数组,并根据第一个数组查找第二个数组中每个项目的位置。例如,对于来自loc1
的23,其在数组中介于20和25之间,则应返回20。
matrix_x = []
def binarySearch(alist, loc):
for item in loc:
midpoint = len(alist)//2
if midpoint == 1:
if item<alist[midpoint]:
return matrix_x.append(alist[midpoint-1])
else:
return matrix_x.append(alist[midpoint])
else:
if item<alist[midpoint]:
return binarySearch(alist[:midpoint],loc)
else:
return binarySearch(alist[midpoint:],loc)
return matrix_x
array = [5,10,15,20,25]
loc1= [23,7,11]
print(binarySearch(array, loc1))
print(matrix_x)
我希望收到这个数组作为结果:
[20,5,10]
但我只收到第一个这样的项目:
[20]
答案 0 :(得分:2)
您正在返回matrix_x.append
语句,因此它只会附加1个项目,在本例中为20
。要获得所需的行为,您可能需要重新调整一些功能。
答案 1 :(得分:1)
只需使用bisect
module:
import bisect
def binarySearch(alist, loc):
return [alist[bisect.bisect(alist, i) - 1] for i in loc]
array = [5,10,15,20,25]
loc1= [23,7,11]
print(binarySearch(array, loc1))
输出:
[20, 5, 10]
查找索引更简单:
def binarySearchIndex(alist, loc):
return [bisect.bisect(alist, i) - 1 for i in loc]