Given a Python list consists of plus or minus numbers, we need to sort that list then find the maximum gap between the successive numbers in that list regarding of its sign.

For example,

maxGap ({-7,-42,-809,-14,-12}) ==> return (767)

Explanation:

The Maximum Gap after sorting the array is 767, The difference between | -809- (-42) | = 767.

def max_gap(numbers): numbers.sort() gap = [] while(len(numbers) > 1): first = numbers.pop(0) second = numbers[0] gap.append(abs(second-first)) return max(gap)

- Sort the list in ascending order.
- Create a full gap list in the while loop.
- Return the maximum different.

The above question is from Codewars, which is the best website for you to train your Python and other programming skill.

Please follow and like us:

def max_gap(numbers):

import numpy as np

numbers.sort()

return max(np.diff(numbers))

Or you could be more Pythonic:

def max_gap(numbers):

numbers.sort()

return max([a-b for a,b in zip(numbers[1:],numbers)])

Bad solution. Once numbers are sorted (O(n*logn)), finding the max gap should be O(n) but popping from the front of the list makes the function O(n*n) and unidiomatic. Also, abs is not needed as differences are already positive.

def max_gap(numbers):

if len(numbers) < 2:

raise ValueError("Need at least 2 numbers to have a gap")

numbers.sort()

num = iter(numbers)

gap = []

first = next(num)

for second in num:

gap.append(second-first)

first = second

return max(gap)

print(max_gap([-7,-42,-809,-14,-12]))

ok

Another approach using iterators in a more Python3 style (in my opinion, it is quite LISPish as well ðŸ™‚ ) :

def my_max_gap(numbers):

numbers = sorted(numbers)

return max(

( second – first for first,second in

zip(numbers,islice(numbers,1,None) ) ) )