Python: max(数字列表作为字符)给出正确和错误的答案
Python: max(a list of numbers as characters) gives right and wrong answer
所以这是确切的场景 - 考虑列表:
x=['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']
现在 max(x)
应该给出 '542' 而不是它给出 '6',但是如果你取出 '6' 它确实给出 '542' 作为最大值。另一方面,min(x)
正确地给出了 '-214' 作为答案。
如果将 x 转换为数字列表,那么显然 max(x)
会给出正确的输出 542。至少从我对 Python 的了解来看,这是一种不可靠的行为,我想探索一下我是否遗漏了一些关于 max()
函数如何工作的东西,可以解释这种行为。
当我写这个问题并试图用 max()
函数理解这种行为时,我尝试了 x.sort()
并给出了答案。那么让我粘贴排序后的列表:
['-214', '-3', '-6', '-64', '0', '1', '29', '4', '4' , '5', '54', '542', '6']
所以基本上这些都是字符串,字符串的初始字符决定了它作为字符串的值。意思是,5kaify
会比 6kaify
排在前面。
为了更清楚,如果我将一堆字母添加到此列表中,如下所示:
x=['4', '5', '29', '54', '4', '0',
'd'
, '-214', '542', '-64', '1',
'a'
, '-3',
'c'
, '6', '-6']
max(x)
将给出 'd'
作为答案,因为按字母顺序它会晚于列表中的所有字符串,因此 max()
检查字母顺序作为 strings/characters 列表的值而不是其 integral/numeric 值。希望这对您有所帮助。
您使用的是字符串而不是整数。获取字符串时:它们按字母顺序排序。
x.sort()
:
['-214', '-3', '-6', '-64', '0', '1', '29', '4', '4', '5', '54', '542', '6']
你需要用map把它们转成int。
max(map(int,x))
# 542
所以基本上 max 和 min 在使用字符串时将使用按字母顺序排列的最高字符。想想数组
['all','b','c','d']
max 将列出 d 作为答案,因为按字母顺序排序时我们首先依赖初始字符,只有重复的字符我们才会检查下一个字符。
因此,当我们尝试将数字作为字符串进行排序时,它将使用相同的逻辑。因此 6 将高于 562,因为 6 > 5.
字母顺序为符号 < 数字(按 0-9 顺序)< 字符(按 a-z 顺序)
希望这能回答您的问题。
这是另一种方法,
>>> x=['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']
>>>
>>> max(x, key=lambda x : int(x))
'542'
>>> min(x, key=lambda x : int(x))
'-214'
所以这是确切的场景 - 考虑列表:
x=['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']
现在 max(x)
应该给出 '542' 而不是它给出 '6',但是如果你取出 '6' 它确实给出 '542' 作为最大值。另一方面,min(x)
正确地给出了 '-214' 作为答案。
如果将 x 转换为数字列表,那么显然 max(x)
会给出正确的输出 542。至少从我对 Python 的了解来看,这是一种不可靠的行为,我想探索一下我是否遗漏了一些关于 max()
函数如何工作的东西,可以解释这种行为。
当我写这个问题并试图用 max()
函数理解这种行为时,我尝试了 x.sort()
并给出了答案。那么让我粘贴排序后的列表:
['-214', '-3', '-6', '-64', '0', '1', '29', '4', '4' , '5', '54', '542', '6']
所以基本上这些都是字符串,字符串的初始字符决定了它作为字符串的值。意思是,5kaify
会比 6kaify
排在前面。
为了更清楚,如果我将一堆字母添加到此列表中,如下所示:
x=['4', '5', '29', '54', '4', '0',
'd'
, '-214', '542', '-64', '1',
'a'
, '-3',
'c'
, '6', '-6']
max(x)
将给出 'd'
作为答案,因为按字母顺序它会晚于列表中的所有字符串,因此 max()
检查字母顺序作为 strings/characters 列表的值而不是其 integral/numeric 值。希望这对您有所帮助。
您使用的是字符串而不是整数。获取字符串时:它们按字母顺序排序。
x.sort()
:
['-214', '-3', '-6', '-64', '0', '1', '29', '4', '4', '5', '54', '542', '6']
你需要用map把它们转成int。
max(map(int,x))
# 542
所以基本上 max 和 min 在使用字符串时将使用按字母顺序排列的最高字符。想想数组
['all','b','c','d']
max 将列出 d 作为答案,因为按字母顺序排序时我们首先依赖初始字符,只有重复的字符我们才会检查下一个字符。
因此,当我们尝试将数字作为字符串进行排序时,它将使用相同的逻辑。因此 6 将高于 562,因为 6 > 5.
字母顺序为符号 < 数字(按 0-9 顺序)< 字符(按 a-z 顺序)
希望这能回答您的问题。
这是另一种方法,
>>> x=['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']
>>>
>>> max(x, key=lambda x : int(x))
'542'
>>> min(x, key=lambda x : int(x))
'-214'