2017-10-16 166 views
0

我需要查找值列表的最小值,但我禁止使用任何内置函数或库。我被允许使用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)”,但是再次,我是不允许的。我只想去做那件事。

+0

https://stackoverflow.com/questions/11964450/python-order-a-list-of-numbers-without-built-in-sort-min-max-function – narn

+1

[python:order a list可能的重复数字没有内置排序,最小,最大功能](https://stackoverflow.com/questions/11964450/python-order-a-list-of-numbers-without-built-in-sort-min-max-功能) – narn

回答

0

编辑:

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

如果你真的想:既然你不能使用减少(),您可以按以下三个整数做内联以避免对教授的缘故拉姆达那么你可以传统上写:

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

要展开上述功能,当输入扩展非常大的将最好地实现使用一个内置的名为降低功能(特别是如果你是试图做别的检查最大或最小,这显然是一个内置的功能)。

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和6进行比较。由于1较低,因此将返回这两个值。现在将比较1和3。同样,由于它更低,它将被返回来替换这两个值。也许我应该在中间的某个位置嵌套1,使之更加明显,但无论身在何处的最低值在号码列表中,减少功能将您的整个迭代,并返回基于您传递的功能单一值第一个论点。

注意,你可以做同样的最多,只需切换a和b的check_greater()函数的返回语句。

+0

对不起,但我不允许使用内置库或函数和functools以及reduce函数违反这两个限制。我感谢您花时间帮助我弄清楚这一点。 我也想感谢你让我知道这个功能,因为即使我可以使用函数,我甚至都不会想到它。 –

+0

顶部的答案可能是您可以使用的最少的代码行。第二个功能可以减少gil.fernandes解决方案的几行内容。如果你需要做一些复杂的迭代操作,可以使用reduce,所以我留下了那里 – Hanzy

+0

@ Reti43你是对的,我应该用“和”来代替链接操作符。我已经做了一个修复,谢谢! – Hanzy

0

既然你提到的列表,你可以通过递归做到

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 

它所做的

  • 列表分钟或者是第一要素,或者分剩余的
  • 空列表被忽略(具有无穷大的值)

但是,请记住,这是不是在蟒蛇高效

+0

我认为这个想法并不是有效的,但更多的是因为它是一个痛苦的屁股。 –

+1

@TristanStroud:OK,这个例子是! –

+0

此使用库,这是对OP的要求。 – Reti43

0

我的工作了一段时间,并结束了与

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

的作品真的很好。如果没有在这里为我提供的信息,我不会已经能够做到这一点,所以,谢谢大家非常感谢!

相关问题