在列表中寻找两个整数间的最大差值

14 投票
5 回答
7333 浏览
提问于 2025-04-16 02:27

我有一个整数列表,比如:

values = [55, 55, 56, 57, 57, 57, 57, 62, 63, 64, 79, 80]

我想找出两个相邻数字之间最大的差值。

在这个例子中,最大的差值是 15,出现在 64->79 之间。

这些数字可以是负数或正数,可以是递增的、递减的,或者两者都有。最重要的是,我需要找出两个相邻数字之间最大的差值。

有没有什么快速的方法来做到这一点?这些列表可能包含几百到几千个整数。

这是我现在的代码:

prev_value = values[0]
largest_delta = 0

for value in values:
  delta = value - prev_value
  if delta > largest_delta:
    largest_delta = delta
  prev_value = value

  return largest_delta

有没有更快的方法?这花费的时间有点长。

5 个回答

2

试着用 timeit 模块来测量一下这些代码的执行时间:

>>> values = [55, 55, 56, 57, 57, 57, 57, 62, 63, 64, 79, 80]
>>> max(values[i+1] - values[i] for i in xrange(0, len(values) - 1))
15
>>> max(v1 - v0 for v0, v1 in zip(values[:-1], values[1:]))
15
>>> from itertools import izip, islice
>>> max(v1 - v0 for v0, v1 in izip(values[:-1], values[1:]))
15
>>> max(v1 - v0 for v0, v1 in izip(values, islice(values,1,None)))
15
>>>
2

这段话主要是想推荐一下Python的itertools库里的那些很棒的使用示例

在这个情况下,可以使用上面链接中的pairwise功能。

from itertools import tee, izip

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

values = [55, 55, 56, 57, 57, 57, 57, 62, 63, 64, 79, 80]

print max(b - a for a,b in pairwise(values))
24

这段代码的意思是……

首先,它定义了一个变量,变量就像一个盒子,可以用来存放信息。接着,它给这个盒子里放了一些数据。然后,代码会执行一些操作,比如计算、比较或者改变这些数据。

最后,代码可能会输出结果,告诉你它做了什么,或者把结果显示在屏幕上。

总之,这段代码就是在告诉计算机要做哪些事情,步骤是怎样的。

max(abs(x - y) for (x, y) in zip(values[1:], values[:-1]))

撰写回答