你好,我是那种困惑的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