python 中的 Max 和 Min 方法,返回不正确的值

Max and Min methods in python, returning incorrect values

我在 Python 开始学习编程语言已经很久了,我正在编写一个程序,该程序从文件中读取以检索值。目前我有问题的程序可以从文件中读取并将某些值放入元组中,但是,我现在面临的问题是 return 从我的元组列表中 [=] 获取最小值和最大值26=],我在元组列表中的值列表是:

tuple = ('44.0', '34.0', '17.0', '6.0','15.0') 

然而,当我使用 max 调用 max(tuple) 时,我得到的结果是 6.0 而不是 44.0 的正确答案。同样,如果我尝试使用 min(tuple) 来 return 最小值。我得到的是 15.0 的值,而不是 6.0 的正确值。

拜托,您能告诉我如何解决这个问题,以便我可以 return 获得正确的值吗?

字符串比较默认为 lexicographical。这意味着“9”在字典序上大于“10”,因为“9”的ASCII值(57)大于“1”的ASCII值(49),依此类推。

如果您想将这些字符串值与它们的实际数值进行比较,您必须将 key 参数传递给 max/min:

max(tupple, key=float)
# '44.0'

min(tupple, key=float)
# '6.0'

当然,这需要您所有的元组值都是 floats/ints 的字符串表示形式。如果您有一个非数字字符串(例如 'abc'),这将不起作用。

您得到的最大值是“6.0”,因为您实际上是在比较字符串而不是 integers/floats。

字符串比较是按字典顺序进行的,因此您得到“6.0”作为最大值。

您可以传递一个 key 参数,以便进行算术比较而不是字典顺序比较,如下所示:

max(yourTupple, key = float)

tuple的元素是字符串,可以给max和min赋予key函数:

 max(tupple, key=float) 44.0
 min(tupple, key=float) 6.0

您可以按照其他人的指示将 key 传递给 min 或 max,或者您可以 map tuple to floats

t = ('44.0', '34.0', '17.0', '6.0','15.0')
print(min(map(float,t))) #prints 6.0
print(max(map(float,t))) #prints 44.0

也请避免命名变量 tuple 因为这是内置函数的名称,所以例如 tuple([1,2,3]) 是合法的 python 语法返回元组 (1,2,3),但是例如,如果您将代码放在前面 tuple = (10,11,12) ,它将产生 TypeError

元组中的值定义为 string。如果您希望将它们视为 float,请不要在定义元组时使用括号:

myTuple = (44.0, 34.0, 17.0, 6.0, 15.0)

print(min(myTuple)) # 6.0

print(max(myTuple))  #44.0

您得到奇怪结果的原因是变量元组中的项目都是字符串,字符串比较与数字比较的工作方式不同。在字符串比较中,每个字符串项中的第一个元素用于比较的第一遍。所以在 tupple 的情况下,比较将在这些项目之间进行 ('4', '3 ', '1', '6', '1')。取其中的最大值将产生最大值“6”(但在原始元组中表示“6.0”),最小值将是“1”(最后一个 1 表示 15.0)。

为避免这种情况,您应该首先将字符串值转换为浮点数,然后根据需要取最大值和最小值...

# convert the elements of tupple to float
tupple = tuple(float(i) for i in tupple)
print(tupple)
# returns (44.0, 34.0, 17.0, 6.0, 15.0)

# take the max of tupple
max(tupple)
# returns 44.0

# take the min of tupple
min(tupple)
# returns 6.0