对 max() 内置函数感到困惑
confused about max() built in function
你好我对 max() 函数有点困惑,我有以下代码:
a = '9:30'
b = '10:44'
c = '8:22'
x = max(a, b, c)
print (x)
所以我的问题是:为什么会这样 return 9:30?如果我要从 max 中删除 a 它将 return 8:22
字符串 a
比较最大,因为它以 9
开头,而其他字符串以 1
和 8
开头。 Python 因此 returns '9:30'
作为这三个字符串中的最大值。
因为它的参数是字符串,所以它返回按字母顺序排列的最新字符串。
它正在比较字符串,因此,它首先比较第一个字符,然后,如果该字符相同,则移动到下一个,然后是下一个,依此类推。
所以 '9:30' 是 return 编辑的,因为 9 > 8 > 1。如果你想从“10:44”到 return,那么你应该使用 datetime
模块,除非您想为此编写自定义代码
编辑:并被打字速度更快的人狙击!
当您进行字符串比较时,'9'
的 int
或 ASCII
值大于 '8'
和 '1'
。您可以使用 ord
内置函数查看单个字符的 int
值。
>>> ord('9')
57
>>> ord('1')
49
>>> ord('8')
56
并且 Python 以 lexicographical 方式进行比较(每个字符从左到右)。它发现 '9'
的值更大。如果发现 '8'
的值大于 '1'
.
,则删除 '9'
实现的一种方法可能是:-
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(':')))
您比较的是字符串,而不是数字或时间。因此,它通过第一个字符比较字符串(如果相等,则通过第二个字符,依此类推),"9:30"
的第一个字符是最高的。
如果你想比较时间,你可以split
:
符号处的字符串,map
部分为整数并比较它们,使用相应的key
函数。
x = max([a, b, c], key=lambda s: map(int, s.split(":")))
因为 max
函数会按字典顺序查找最大值,您可以使用 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
你好我对 max() 函数有点困惑,我有以下代码:
a = '9:30'
b = '10:44'
c = '8:22'
x = max(a, b, c)
print (x)
所以我的问题是:为什么会这样 return 9:30?如果我要从 max 中删除 a 它将 return 8:22
字符串 a
比较最大,因为它以 9
开头,而其他字符串以 1
和 8
开头。 Python 因此 returns '9:30'
作为这三个字符串中的最大值。
因为它的参数是字符串,所以它返回按字母顺序排列的最新字符串。
它正在比较字符串,因此,它首先比较第一个字符,然后,如果该字符相同,则移动到下一个,然后是下一个,依此类推。
所以 '9:30' 是 return 编辑的,因为 9 > 8 > 1。如果你想从“10:44”到 return,那么你应该使用 datetime
模块,除非您想为此编写自定义代码
编辑:并被打字速度更快的人狙击!
当您进行字符串比较时,'9'
的 int
或 ASCII
值大于 '8'
和 '1'
。您可以使用 ord
内置函数查看单个字符的 int
值。
>>> ord('9')
57
>>> ord('1')
49
>>> ord('8')
56
并且 Python 以 lexicographical 方式进行比较(每个字符从左到右)。它发现 '9'
的值更大。如果发现 '8'
的值大于 '1'
.
'9'
实现的一种方法可能是:-
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(':')))
您比较的是字符串,而不是数字或时间。因此,它通过第一个字符比较字符串(如果相等,则通过第二个字符,依此类推),"9:30"
的第一个字符是最高的。
如果你想比较时间,你可以split
:
符号处的字符串,map
部分为整数并比较它们,使用相应的key
函数。
x = max([a, b, c], key=lambda s: map(int, s.split(":")))
因为 max
函数会按字典顺序查找最大值,您可以使用 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