你好,我是那種困惑的MAX()函數,我有以下代碼:困惑MAX()內置函數
a = '9:30'
b = '10:44'
c = '8:22'
x = max(a, b, c)
print (x)
所以我的問題是:爲什麼這個回報9:30?如果我是從內部最大刪除一個它將返回8:22
你好,我是那種困惑的MAX()函數,我有以下代碼:困惑MAX()內置函數
a = '9:30'
b = '10:44'
c = '8:22'
x = max(a, b, c)
print (x)
所以我的問題是:爲什麼這個回報9:30?如果我是從內部最大刪除一個它將返回8:22
字符串a
比喻爲最大的,因爲它與9
開始和其他琴絃與1
和8
開始。因此,Python返回'9:30'
作爲這三個字符串中的最大值。
由於它的參數是字符串,它返回字母順序最新的字符串。
它比較字符串,並且,因此,它開始通過比較第一字符,然後,如果該字符是相同的,
因此移動到下一再下等等等等' 9:30'返回,因爲9> 8> 1。如果你想要「10:44」返回,那麼你應該使用datetime
模塊,除非你想編寫自定義代碼,編輯:
edit:and sniped by打字速度更快的人!
當你在做字符串比較'9'
的int
或ASCII
值大於'8'
和'1'
更大。您可以使用ord
內置函數查看單個字符的值int
。
>>> ord('9')
57
>>> ord('1')
49
>>> ord('8')
56
而且Python以lexicographical的方式做比較(從左到右每個字符)。它發現價值更大的'9'
。如果刪除'9'
,如果發現'8'
的值大於'1'
。
一種實現方式可以是: -
a = '9:30'
b = '10:44'
c = '8:22'
d = '10:55'
print max([a, b, c, d], key=lambda x: map(int, x.split(':')))
更好地移除'[0]',否則它會比較'10:30'和'10:45'。 –
@tobias_k謝謝。這確實有道理。 –
另外,'lambda i:int(i)'與'int'相同。 –
你比較字符串,而不是數字或時間。因此,它比較字符串的第一個字符(如果這些字符相等,第二個字符等等),並且"9:30"
的第一個字符是最高的。
如果你想的時候相比,你可以在:
符號split
字符串,map
部分整數和比較這些,使用根據key
功能。
x = max([a, b, c], key=lambda s: map(int, s.split(":")))
它,因爲那max
功能將lexicographicaly找到最大值,您可以使用適當的鍵max
功能到小時和分鐘轉換爲int
。
>>> l=[a,b,c]
>>> max(l,key=lambda d :map(int, d.split(":")))
'10:44'
這是另一種方法,因此您可以使用常規的max
函數。首先,填充字符串以便"9"
變爲"09"
和"10"
保持"10"
。您可以使用str.zfill
此:
a = '9:30'
b = '10:44'
c = '8:22'
a, b, c = map(lambda s: s.zfill(5), (a, b, c))
現在,他們將是你想要什麼字典序!
print(max([a, b, c]))
10:44
你只需要墊他們一次,但你會被卡住:
print(min([a, b, c]))
08:22
字典順序,' 「9」'是比' 「1」'' –
了','B大'和'c'不是時間;他們只是字符串。 – chepner
正如@chepner在上面提到的,你可能想用'time'而不是字符串。請參閱https://docs.python.org/2/library/time.html – bentank