Skip to content Skip to sidebar Skip to footer

Finding The Largest Delta Between Two Integers In A List

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

Solution 1:

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

Solution 2:

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 inzip(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
>>>

Solution 3:

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

defpairwise(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]

printmax(b - a for a,b in pairwise(values))

Solution 4:

With reduce (ugly i guess)

>>>foo = [5, 5, 5, 5, 8, 8, 9]    >>>print reduce(lambda x, y: (max(x[0], y - x[1]), y), foo, (0, foo[0]))[0]
3

Solution 5:

Starting in Python 3.10, the new pairwise function provides a way to slide through pairs of consecutive elements, and thus find each of their differences:

from itertools import pairwise

# values = [55, 55, 56, 57, 57, 57, 57, 62, 63, 64, 79, 80]max(abs(x-y) for x, y in pairwise(values))
# 15

The intermediate result of pairwise:

pairwise([55, 55, 56, 57, 57, 57, 57, 62, 63, 64, 79, 80])
# [(55, 55), (55, 56), (56, 57), (57, 57), (57, 57), (57, 57), ...]

Post a Comment for "Finding The Largest Delta Between Two Integers In A List"