2017-10-16 82 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) 

的作品真的很好。如果沒有在這裏爲我提供的信息,我不會已經能夠做到這一點,所以,謝謝大家非常感謝!

相關問題