# Solving this Python implementation for Stock Gains

I wanted to ask for a code review for the following interview question:

Problem: Max Gain

Given an list of integers, write a method - max_gain - that returns the maximum gain. Maximum Gain is defined as the maximum difference between 2 elements in a list such that the larger element appears after the smaller element. If no gain is possible, return 0.

### Example:

max_gain([100,40,20,10]) ==> 0
max_gain([0,50,10,100,30]) ==> 100


### Solution

def max_gain(input_list):
if len(input_list) < 2:
return 0
a = input_list[0]
max_val = 0
for i in input_list[1:]:
max_val = max(max_val, i-a)
a = min(a, i)
return max_val


As a variable name, i has a connotation of being an index, rather than a value, of a list. I would expect it to be used in contexts more like for i, value in enumerate(values).

Making the slice input_list[1:] would involve duplicating most of the list. I would use an iterator to avoid doing that, and also to simplify the handling of the special case.

With a few improvements in naming…

def max_gain(input_list):
prices = iter(input_list)

The code logic is sound. I do not think you can optimise it further. Though, you should add the docstring to the function, and use better variable names (current_min instead of a for eg.).