我从Python离开了很久之后才开始使用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
的正确值。
请,您能否建议我如何解决此问题,以便我可以返回正确的值?
答案 0 :(得分:5)
默认情况下,字符串比较为lexicographical。这意味着“ 9”在字典上大于“ 10”,因为ASCII值“ 9”(57)大于ASCII值“ 1”(49),依此类推。
如果要将这些字符串值与它们的实际数字值进行比较,则必须将key
参数传递给max
/ min
:
max(tupple, key=float)
# '44.0'
min(tupple, key=float)
# '6.0'
当然,这要求您所有的元组值都必须是浮点数/整数的字符串表示形式。如果您使用非数字字符串(例如'abc'),则此操作将无效。
答案 1 :(得分:3)
您获得的最大值是“ 6.0”,因为您实际上是在比较字符串而不是整数/浮点数。
字符串比较是按字典顺序进行的,因此最大值为“ 6.0”。
您可以传递一个key
参数,以便比较是算术的而不是字典的,如下所示:
max(yourTupple, key = float)
答案 2 :(得分:1)
tupple的元素是字符串,您可以将键函数赋予max和min:
mDirection
答案 3 :(得分:1)
您可以将密钥传递给其他人指出的最小值或最大值,也可以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
答案 4 :(得分:1)
元组中的值定义为字符串。如果希望将它们视为浮点型,则在定义元组时不要使用括号:
myTuple =(44.0,34.0,17.0,6.0,15.0)
print(min(myTuple))#6.0
print(max(myTuple))#44.0
答案 5 :(得分:0)
得到奇怪结果的原因是因为变量tupple中的项目都是字符串,并且字符串比较的工作方式不同于数字比较。在字符串比较中,每个字符串项中的第一个元素用于比较的第一遍。因此,在tupple的情况下,将在这些项目('4', '3 ', '1', '6', '1')
之间进行比较。取其中的最大值将产生“ 6”,这是最大值(但在原始的tupple中表示“ 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