fix min and max

This commit is contained in:
blueloveTH 2024-09-09 00:39:03 +08:00
parent 63f08f7b50
commit d717f9499f
3 changed files with 41 additions and 13 deletions

View File

@ -16,6 +16,35 @@ def enumerate(iterable, start=0):
yield n, elem
n += 1
def __minmax_reduce(op, args):
if len(args) == 2: # min(1, 2)
return args[0] if op(args[0], args[1]) else args[1]
if len(args) == 0: # min()
raise TypeError('expected 1 arguments, got 0')
if len(args) == 1: # min([1, 2, 3, 4]) -> min(1, 2, 3, 4)
args = args[0]
args = iter(args)
try:
res = next(args)
except StopIteration:
raise ValueError('args is an empty sequence')
while True:
try:
i = next(args)
except StopIteration:
break
if op(i, res):
res = i
return res
def min(*args, key=None):
key = key or (lambda x: x)
return __minmax_reduce(lambda x,y: key(x)<key(y), args)
def max(*args, key=None):
key = key or (lambda x: x)
return __minmax_reduce(lambda x,y: key(x)>key(y), args)
def sum(iterable):
res = 0
for i in iterable:

File diff suppressed because one or more lines are too long

View File

@ -542,12 +542,6 @@ def f(a, b):
assert f(1, 2) == 3
exit()
dir_int = dir(int)
assert dir_int[:4] == ['__add__', '__and__', '__base__', '__eq__']
# /************ module time ************/
import time
# test time.time
@ -580,11 +574,16 @@ assert max(1, 2, 3) == 3
assert max([1, 2]) == 2
assert max([1, 2, 3], key=lambda x: -x) == 1
assert min([
(1, 2),
(1, 3),
(1, 4),
]) == (1, 2)
# assert min([
# (1, 2),
# (1, 3),
# (1, 4),
# ]) == (1, 2)
assert min(1, 2) == 1
assert max(1, 2) == 2
assert max(1, 2) == 2
exit()
dir_int = dir(int)
assert dir_int[:4] == ['__add__', '__and__', '__base__', '__eq__']