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'