Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Implementation of Max() function in python

def my_max(*a):
    n = len(a)
    max_v = a[0]
    for i in range (1,n):
        if a[i] > max_v:
        max_v = a[i]
    return max_v  


def my_min(*a):
    n = len(a)
    min_v = a[0]
    for i in range (1,n):
        if a[i] < min_v:
            min_v = a[i]
    return min_v


test = [7, 4, 2, 6, 8]
assert max(test) == my_max(test) and min(test) == my_min(test)
assert max(7, 4, 2, 5) == my_max(7, 4, 2, 5) and min(7, 4, 2, 5) 
== my_min(7, 4, 2, 5)
print("pass")

I am trying to write the max() function of python in codes.
If I add the asterisk in front of the input, it won’t pass the first assertion.
If I don’t it wouldn’t pass the second assertion.
What should I write in input for it to pass both assertions like it does in max() function of python?

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Short answer: Use a star to collect the arguments in a tuple and then add a special case for a tuple of length one to handle a single iterable argument.

Source material: The C code that handles the logic can be found at: https://github.com/python/cpython/blob/da20d7401de97b425897d3069f71f77b039eb16f/Python/bltinmodule.c#L1708

Simplified pure python code: If you ignore the default and key keyword arguments, what’s left simplifies to:

def mymax(*args):
    if len(args) == 0:
        raise TypeError('max expected at least 1 argument, got 0')
    if len(args) == 1:
        args = tuple(args[0])
    largest = args[0]
    for x in args[1:]:
        if x > largest:
            largest = x
    return largest

There are other nuances, but this should get you started.

Documentation: The special handling for the length one case versus other cases is documented here:

Return the largest item in an iterable or the largest of two or more
arguments.

If one positional argument is provided, it should be an iterable. The
largest item in the iterable is returned. If two or more positional
arguments are provided, the largest of the positional arguments is
returned.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading