2014-01-15 32 views
0

我對python很陌生。所以,我想知道哪種方法更適合在函數中查找列表中的元素。用兩種不同的方式從列表中搜索的功能

第一:

def search_binary(xs,target): 
    count = 0 
    for i in xs: 
     if i == target: 
      return count 
      count = count +1 
     else: 
      count = count +1 
      continue 
    return -1 

二:

def search_binary(xs, target): 
    lb = 0 
    ub = len(xs) 
    while True: 
     if lb == ub: 
      return -1 

     mid_index = (lb + ub) // 2 

     item_at_mid = xs[mid_index] 


     if item_at_mid == target: 
      return mid_index  
     if item_at_mid < target: 
      lb = mid_index + 1  
     else: 
      ub = mid_index 
+0

是按排序嗎?如果不是這樣,答案也不是:) – roippi

+0

,如果你正在做二分搜索,你應該使用'bisect'模塊。 – roippi

回答

0

第二,

這是不是真的具體到Python雖然,第一爲O操作(N)時,秒是二進制搜索,並運行在O(log(n))時間

+1

假設這是一個排序列表.....如果它不是二進制搜索將無法正常工作 –

1

如果列表未被排序或使用lin像第一耳搜索是有道理的,但它應該做的事是這樣的:

# linear search O(n) 
xs.index(target) 

如果列表進行排序和大,你應該使用像第二個二進制搜索,但它會更好,它使用bisect喜歡做這個:

# binary search O(log n) 
from bisect import bisect_left 
def search_binary(xs, target): 
    i = bisect_left(xs, target) 
    if i != len(xs) and xs[i] == target: 
     return i 
    raise ValueError 
相關問題