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
我在 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