2016-09-17 91 views
-1

我想從列表中獲取最大值。如何在python中查找兩個數字的最大值?

List = ['1.23','1.8.1.1'] 
print max(List) 

如果我打印此我得到1.8.1.1代替1.23。 我做錯了什麼?

+4

「1.8.1.1」是一個數字?爲什麼它應該/不是答案? –

+0

你在比較什麼?版本號? – Wickramaranga

+1

是的,他們是在MKS(版本管理工具)的版本號碼 – harika

回答

0

這些不是數字,它們是字符串,因此它們按字典順序排序。由於字符8在2之後,所以1.8.1.1作爲最大值返回。要解決這個

一種方法是寫自己的比較函數,該函數的字符串的每個部分作爲int和它們的數值進行比較:

def version_compare(a, b): 
    a_parts = a.split('.') 
    b_parts = b.split('.') 
    a_len = len(a_parts) 
    b_len = len(b_parts) 
    length = min(a_len, b_len) 

    # Compare the parts one by one 
    for i in range(length): 
     a_int = int(a_parts[i]) 
     b_int = int(b_parts[i]) 

     # And return on the first nonequl part 
     if a_int != b_int: 
      return a_int - b_int 

    # If we got here, the longest list is the "biggest" 
    return a_len - b_len 

print sorted(['1.23','1.8.1.1'], cmp=version_compare, reverse=True)[0] 
+0

爲什麼你需要排序?這個函數稍作更新可以給出最大值 – prakharsingh95

1

最簡單的方法是,使用元組進行比較。
說:

versions = ['1.23','1.8.1.1'] 

def getVersionTuple(v): 
    return tuple(map(int, v.strip().split('.'))) 

現在你可以使用,print(max(map(getVersionTuple, versions)))得到最大。

編輯

您可以使用'.'.join(map(str, m))得到原始的字符串(給定m擁有最大的元組)。

+0

,這個輸出是(1,23)。相反,它應該給出1.23 – harika

0

類似的方法 - 假設這些字符串是版本號 - 是版本字符串轉整數列表:

vsn_list=['1.23', '1.8.1.1'] 
print sorted([ [int(v) for v in x.split(".")] for x in vsn_list ]) 

當你比較字符串,則比較逐個字符,所以任何字符串以' 2'將在以「8」開頭的字符串之前排序。