Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Собственная реализация встроенных функций min и max"""
- from functools import reduce
- def min(*args, **kwargs):
- key = kwargs.get("key", None)
- if key is not None:
- if len(args) > 1:
- arr = list(map(key, args))
- value = reduce(lambda x,y: x if x < y else y, map(key, args))
- return args[arr.index(value)]
- if len(args) == 1:
- arr = list(map(key, *args))
- value = reduce(lambda x,y: x if x < y else y, map(key, *args))
- return args[0][arr.index(value)]
- if len(args) > 1:
- args = [arg for arg in args]
- result = reduce(lambda x,y: x if x < y else y, args)
- return result
- result = reduce(lambda x,y: x if x < y else y, *args)
- return result
- def max(*args, **kwargs):
- key = kwargs.get("key", None)
- if key is not None:
- if len(args) > 1:
- arr = list(map(key, args))
- value = reduce(lambda x,y: x if x > y else y, map(key, args))
- return args[arr.index(value)]
- if len(args) == 1:
- arr = list(map(key, *args))
- value = reduce(lambda x,y: x if x > y else y, map(key, *args))
- return args[0][arr.index(value)]
- if len(args) > 1:
- args = [arg for arg in args]
- result = reduce(lambda x,y: x if x > y else y, args)
- return result
- result = reduce(lambda x,y: x if x > y else y, *args)
- return result
- if __name__ == '__main__':
- #These "asserts" using only for self-checking and not necessary for auto-testing
- assert max(3, 2) == 3, "Simple case max"
- assert min(3, 2) == 2, "Simple case min"
- assert max([1, 2, 0, 3, 4]) == 4, "From a list"
- assert min("hello") == "e", "From string"
- assert max(2.2, 5.6, 5.9, key=int) == 5.6, "Two maximal items"
- assert min([[1, 2], [3, 4], [9, 0]], key=lambda x: x[1]) == [9, 0], "lambda key"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement