找到列表(或集合)数字成员之间的某些差异

时间:2016-10-19 15:14:41

标签: python

我的第一个问题,所以请保持温和,我希望我的格式正确:)我认为问题是自我解释。我正在寻找一种更好/更快的方法来找到一组数字的差异...也许我想要一个宽容。我想出的就是:

 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

但我敢打赌,有更好的方法来实现结果。

欢迎任何想法,

基督教

2 个答案:

答案 0 :(得分:0)

您可以避免在第二个循环中运行数字的最低部分(不需要low,只需检查前面的数字)

有了这个,您可以删除set并使用list代替:更少的哈希,更少的处理。此外,不要通过排序来更改numbers输入,调用者可能不会期望它。改为使用本地排序列表(另一个优势是numbers现在可以是setdeque ...:

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

(也许这对代码审查来说是一个更好的问题,边界很薄)

答案 1 :(得分: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])