I have a list of integers, i.e.:
values = [55, 55, 56, 57, 57, 57, 57, 62, 63, 64, 79, 80]
I am trying to find the largest difference between two consecutive numbers.
In this case it would be 15
from 64->79
.
The numbers can be negative or positive, increasing or decreasing or both. The important thing is I need to find the largest delta between two consecutive numbers.
What is the fastest way to do this? These lists can contain anywhere from hundreds to thousands of integers.
This is the code I have right now:
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
Is there a faster way to do this? It takes a while.
max(abs(x - y) for (x, y) in zip(values[1:], values[:-1]))
Try timing some of these with the timeit
module:
>>> 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
>>>
This is more as an advertisement for the brilliant recipes in the Python itertools help.
In this case use pairwise as shown in the help linked above.
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))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With