在不排序或使用任何内置函数或库的情况下查找值列表的最小值和最大值

Finding the Minimum and Maximum of a list of values without sorting or using any built in Functions or Libraries

我需要找到值列表的最小值,但我被禁止使用任何内置函数或库。我可以使用 if else 或 elif,但这就是范围。

我必须使用基本运算符和(我想?)我自己的直觉来解决这个问题。

不幸的是,我没有那么直观,无论我使用 if else 语句或 < > 运算符的什么组合,我都无法让它工作。

我真的是 python 的新手,我的老师几乎没有帮助描述如何去做这件事(除了定义运算符。这就是他所做的一切)。

所以基本上我有一个包含三个整数的列表,我必须找到这三个整数的最小值和最大值(还要找到其他一些东西,但让我们保持简单)。我必须使用函数来定义整数和单独的函数来定义列表的最小值和最大值。

我有定义整数的函数,这很简单,现在我坚持这个:

def determine_min_value(a,b,c):
    print ("The minimum value is {}.".format(c < (b < a)))

其中 a、b 和 c 为变量 (num1, num2, num3)

它输出 "The minimum value is False." 如果 False 是一个非常小的数字并且也是输入变量之一,那将会很棒;显然不是。

我完全知道 .format(c < (b < a)) 不会给我想要的东西,但这是我最近的最后一次努力。就像我说的那样,我正在尝试 if else 语句,但我也无法弄清楚。

我根本不知道从这里到哪里去,任何意见将不胜感激。我也知道你想说 "Just put them in a list and use min(1)" 但我还是不被允许。我也很想这样做。

既然你提到了一个值列表,你可以通过递归来完成

import numpy as np

def mymin(lst):
    if not lst:
        return np.inf 
    head = lst[0]
    tail = mymin(lst[1:])
    return head if head < tail else tail

它的作用

  • 列表的最小值要么是第一个元素,要么是其余元素的最小值
  • 空列表被忽略(通过具有无限值)

但是,请记住它在 python

中效率不高

编辑:由于您不能使用 reduce(),您可以对三个整数进行内联,如下所示:

maximum = lambda x, y, z: x if x > (y and z) else y if y > z else z
maximum(1, 5, 7)

如果你真的想为了教授而避免使用 lambda,那么你可以按照传统方式编写它:

def maximum (x, y, z):
    if x > y and z:
        return x
    elif y > z:
        return y
    else:
        return z

要在输入规模非常大时扩展上述功能,最好使用称为 reduce 的内置函数来实现(特别是如果你试图做一些除了检查 max 或 min 之外的事情,这显然是一个内置的 -在功能上)。

from functools import reduce

def check_greater(a,b):
    if a > b:
        return b
    else:
        return a

number_list = [1,6,3,8,5,78,4,23,9]

minimum = reduce(check_greater, number_list)

这会将 check_greater() 函数应用到列表中的每一对元素,并且会不断地 return 每对元素对应一个较低的值。

将比较前 1 和 6。由于 1 较低,因此将用 returned 代替这两个值。现在将比较 1 和 3。同样,由于它较低,因此将 returned 替换这两个值。也许我应该在中间的某个地方嵌套 1 以使其更明显,但无论最小值落在数字列表中的哪个位置,reduce 函数都会根据函数获取整个可迭代对象和 return 单个值你作为第一个参数传递。

请注意,您可以对最大值执行相同的操作,只需在 check_greater() 函数的 return 语句中切换 a 和 b。

我工作了一段时间,最后得到

    # function determines and defines the minimum value
def det_min_value(a,b,c):
    print ("The minimum value is {}.".format(a if (a < b and c)
                                                 else b if (b < c and a)
                                                     else c))
    # for range function 
    return (a if (a < b and c)
                else b if (b < c and a)
                    else c)

效果很好。如果没有这里为我提供的信息,我将无法做到,非常感谢大家!