我的第一个问题,所以请保持温和,我希望我的格式正确:)我认为问题是自我解释。我正在寻找一种更好/更快的方法来找到一组数字的差异...也许我想要一个宽容。我想出的就是:
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
但我敢打赌,有更好的方法来实现结果。
欢迎任何想法,
基督教
答案 0 :(得分: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
(也许这对代码审查来说是一个更好的问题,边界很薄)
答案 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])