python中的Max和Min方法,返回不正确的值[重复]

Posted

技术标签:

【中文标题】python中的Max和Min方法,返回不正确的值[重复]【英文标题】:Max and Min methods in python, returning incorrect values [duplicate] 【发布时间】:2019-05-30 02:51:01 【问题描述】:

我刚刚开始在 Python 中长期使用编程语言,我正在编写一个从文件中读取数据以检索值的程序。目前我已经有问题的程序从文件中读取并将某些值放入一个元组中,但是,我现在面临的问题是从我在 python 中的元组列表中返回最小值和最大值,我的值列表元组列表中有:

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

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

请问,您能否建议我如何解决这个问题,以便我可以返回正确的值?

【问题讨论】:

元组中的值是字符串,当你对它们应用 max 时,你会得到字母顺序最大的字符串。首先将它们转换为数字。 @Rakesh lambda 包装 float 是多余的。 @snakecharmerb 也发现了一个 - 但它是关于排序,而不是最小/最大值,尽管解决方案是相似的 【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

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

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

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

max(yourTupple, key = float)

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

您可以将密钥传递给其他人指定的最小值或最大值,也可以将 map 元组传递给浮点数

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]) 是返回元组(1,2,3) 的合法python 语法,但如果您在代码中更早地放置例如tuple = (10,11,12) 它会产生TypeError

【讨论】:

【参考方案5】:

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

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

print(min(myTuple)) # 6.0

print(max(myTuple))  #44.0

【讨论】:

【参考方案6】:

你得到奇怪结果的原因是变量元组中的项目都是字符串,字符串比较的工作方式与数字比较不同。在字符串比较中,每个字符串项中的第一个元素用于第一次比较。所以在元组的情况下,比较将在这些项目('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中的Max和Min方法,返回不正确的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

math对象的主要方法

max() 与 min()

Python3 常用的几个内置方法

Python学习笔记 - 最牛逼的内建函数max和min

Linq to Entity 求最大小值Max/Min返回null的处理方法

python中的属性方法没有返回正确的值