2012-08-13 51 views
0

這就是我所做的,但是這隻能找到列表中的一個項目我想打印出項目36的兩個索引 請幫助這是我迄今爲止所做的 如果我的方式公佈這還是我的問題是不清楚我提前道歉 [代碼]使用二進制搜索在一個列表中找到多個項目

def main(): 

    mylist=[] 
    for i in range(20): 
     mylist.append(i*3) 

    mylist.append(36) 
    mylist.sort() 
    print mylist 
    binarySearch(mylist,0,len(mylist),36) 

def binarySearch(thelist,lower,upper,item): 

    if upper<lower: 

     print 'item not in the list' 
     return 

    middle=(lower+upper)/2 

    if thelist[middle]<item: 
     lower=middle+1 
     binarySearch(thelist,lower,upper,item) 

    elif thelist[middle]>item: 
     upper=middle-1 
     binarySearch(thelist,lower,upper,item) 

    else: 
     print 'the item was found at index ',thelist[middle],middle 
     return 

main() 
+0

這聽起來像你試圖找到排序數組中的一系列索引。您可以進行二分法搜索,直到找到索引「i」處的項目,而不是索引「i + 1」處的項目。您可以爲其他(最小)限制做到這一點。 – irrelephant 2012-08-13 09:04:57

回答

0

你可以做一個函數來處理這個問題,並返回indicies,而不只是一個整數的列表:

def check_for_number_around_index(index, sorted_list): 
    indices = [index] 
    i = index - 1 
    while(i >= 0 and sorted_list[i] == sorted_list[index]): 
    indicies.append(i) 
    i = i - 1 
    i = index + 1 
    while(i < len(sorted_list) and sorted_list[i] == sorted_list[index]): 
    indicies.append(i) 
    i = i + 1 
    return indicies 
相關問題