2016-10-19 23 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

相关问题