2016-10-19 22 views
-1

的成員之間有一定的區別,所以請溫柔,我希望我的格式正確:)我認爲這個問題是自我解釋。我正在尋找一種更好/更快的方法來找出一組數字中的差異......也許我想要一個容差。所有我想出的是:找到我的第一個問題列表(或設置)

def difference(numbers,diff,tol): 
    '''diff is the searched difference,numbers is a list \ 
    of numbers and tol the tolerance''' 
    numbers.sort() 
    match=set() 
    for i in numbers: 
     low = i+diff-tol 
     high= i+diff+tol 
     for k in numbers: 
       if k > high: 
        break 
       if k < low: 
        continue 
       match.add(i) 
       match.add(k) 
    return match 

但我敢打賭有更好的方法來實現結果。

任何想法是值得歡迎的,

基督教

+5

*「問題是自我解釋」* - 當您說「列表成員之間的差異」時,澄清您的意思並不會造成什麼傷害...... – deceze

+4

我似乎無法理解此「自我解釋的問題「 – Peaceful

+3

我也不清楚你是什麼意思與」寬容「和」差異「參數s? – felipsmartins

回答

0

你可能避免在第二循環中運行的數字的最低部分(不需要low,只檢查數量領先)

隨着你可以刪除set並使用list代替:減少散列,減少處理。另外,不要通過排序來更改numbers輸入,調用者可能不會期望它。使用本地分類列表,而不是(另一個優點是numbers現在可以是set,一個deque ...:

def difference(numbers,diff,tol): 
    '''diff is the searched difference,numbers is a list 
    of numbers and tol the tolerance''' 
    snum = sorted(numbers) 
    match=list() 
    for i,n in enumerate(snum): 
     high= n+diff+tol 
     for j in range(i+1,len(snum)): 
       k = snum[j] 
       if k > high: 
        break 
       match.append(n) 
       match.append(k) 
    return match 

(也許這將是代碼審查一個更好的問題,邊界薄)

+0

謝謝你的建設性反饋。 – Christian

0
count = len(numbers) 
    numbers1 = numbers[:count - 1] 
    numbers2 = numbers[1:] 

    for i in range(0, count - 1): 
     dif = numbers2[i] - numbers1[i] 
     if abs(dif) <= tol: 
      match.add(numbers1[i]) 
      match.add(numbers2[i]) 
+0

請考慮upvote對你有用的答案。 – MarianD

相關問題