为什么Python的max()函数不正确?

时间:2018-11-18 07:36:32

标签: python python-2.7 max

我尝试使用max()函数,但无法获得正确的最大值。

示例:

numbers = "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
a = max(numbers.split(" "))
b = min(numbers.split(" "))
print a
print b

输出:

6
-214

这显然是错误的,最大值应为542。有人知道为什么max()找不到正确的最大值吗?如何获得正确答案?

5 个答案:

答案 0 :(得分:3)

numbers.split(" ")为您提供了 strings 而不是 integers 的列表。


如果您希望max()min()查找最高和最低的 integers ,则需要将 strings 列表转换为使用map(int, your_array) integers 列表。

示例

numbers = "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
numbers = numbers.split(" ")  # Splits your string into a list of strings
numbers = map(int, numbers)  # Converts each element in your list to int

a = max(numbers)
b = min(numbers)
print a  # Outputs 542
print b  # Outputs -214

答案 1 :(得分:1)

Python max()函数是准确的。

您应该看看numbers.split(" ")

它返回一个字符串列表。因此,最大值会比较并给出列表中 strings 的最大值。

>>> numbers.split(" ")
>>> ['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']

而且,随着字符串比较的进行,它将比较每个字符串的第一个字母,最大为:6。

答案 2 :(得分:1)

另一方面,您不需要使用map或其他函数将字符串列表转换为整数列表,因为它会再次遍历列表,max函数接受{ {1}}参数,您可以在此处放置可调用对象,如下所示:

key

在这种情况下,a = max(numbers.split(), key=int) b = min(numbers.split(), key=int) 也与split()相同。

答案 3 :(得分:0)

因为ab的类型为字符串,而不是整数。

numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
a = max(map(int, numbers.split(" ")))
b = min(map(int, numbers.split(" ")))
print a
print b
# 542
# -214

答案 4 :(得分:-2)

尝试一下:

numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
a = max(list(map(int, numbers.split(" "))))
b = min(list(map(int, numbers.split(" "))))
print a
print b