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



我需要找到值列表的最小值,但我被禁止使用任何内置函数或库。我被允许使用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)

它输出"最小值为False"。如果False是一个非常小的数字,也是输入变量之一,那就太好了;显然不是。

我很清楚.format(c<(b<a))不会给我想要的,但这是我最近的最后一搏。就像我说的那样,我正在尝试其他语句,但我也无法理解。

我根本不知道从这里到哪里去,任何意见都将不胜感激。此外,我知道你想说"把它们放在一个列表中,然后使用min(1)",但同样,我是不被允许的。我最想做的就是也这样做。

EDIT:由于不能使用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的内置函数(尤其是当您试图执行除check 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()函数应用于列表中的每一对元素,并将为每一对持续返回一个值,与较低的值相对应。

将比较第一个1和第六个。由于1较低,将返回它来代替这两个值。现在将对1和3进行比较。同样,由于它较低,它将被返回以替换这两个值。也许我应该在中间的某个位置嵌套1,以使其更明显,但无论最小值在数字列表中的哪个位置,reduce函数都会获取整个可迭代项,并根据作为第一个参数传递的函数返回一个值。

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

由于您提到值列表,您可以通过递归来完成

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 中并不高效

我工作了一段时间,最终获得了

# 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)

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

最新更新