我想從列表中獲取最大值。如何在python中查找兩個數字的最大值?
List = ['1.23','1.8.1.1']
print max(List)
如果我打印此我得到1.8.1.1
代替1.23
。 我做錯了什麼?
我想從列表中獲取最大值。如何在python中查找兩個數字的最大值?
List = ['1.23','1.8.1.1']
print max(List)
如果我打印此我得到1.8.1.1
代替1.23
。 我做錯了什麼?
這些不是數字,它們是字符串,因此它們按字典順序排序。由於字符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]
爲什麼你需要排序?這個函數稍作更新可以給出最大值 – prakharsingh95
最簡單的方法是,使用元組進行比較。
說:
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
擁有最大的元組)。
,這個輸出是(1,23)。相反,它應該給出1.23 – harika
類似的方法 - 假設這些字符串是版本號 - 是版本字符串轉整數列表:
vsn_list=['1.23', '1.8.1.1']
print sorted([ [int(v) for v in x.split(".")] for x in vsn_list ])
當你比較字符串,則比較逐個字符,所以任何字符串以' 2'將在以「8」開頭的字符串之前排序。
「1.8.1.1」是一個數字?爲什麼它應該/不是答案? –
你在比較什麼?版本號? – Wickramaranga
是的,他們是在MKS(版本管理工具)的版本號碼 – harika