该函数不会遍历整个数组

时间:2018-01-30 23:12:02

标签: python arrays

我有以下代码获取两个数组,并根据第一个数组查找第二个数组中每个项目的位置。例如,对于来自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]

2 个答案:

答案 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]