混合列表排序异常:为何-377.312被转换为87.6879999999?
问题分析:你的混合列表定义有语法错误!
哈哈,这个问题其实是个很容易忽略的语法小失误!让我给你拆解清楚:
首先看你定义的mixed列表代码:
mixed = [-131.23, 33213, 4454, 566, -33, 465. -377.312, 5.6656]
这里的465. -377.312并不是两个独立的列表元素——Python会把它解析成一个减法运算表达式:465.0 - 377.312,计算后的结果是87.68799999999999。也就是说,你的列表实际包含的元素是:[-131.23, 33213, 4454, 566, -33, 87.68799999999999, 5.6656]
你以为key=float的转换有问题,但实际上问题出在列表定义本身——你的列表里根本不存在-377.312这个元素,自然排序结果里不会出现它。
修正方案
只需要在465.和-377.312之间加上逗号,把它们拆成两个独立元素即可:
# 修正后的列表定义 mixed = [-131.23, 33213, 4454, 566, -33, 465., -377.312, 5.6656]
如果你觉得465.不够直观,写成465.0也完全没问题。
现在再执行print(sorted(mixed, key=float)),就能得到符合逻辑的排序结果(不过要注意:-377.312比-131.23更小,所以正确的排序结果应该是[-377.312, -131.23, -33, 5.6656, 566, 4454, 33213],你之前的预期顺序把-131.23放在第一个是不准确的哦)。
内容的提问来源于stack exchange,提问作者AlejandroVK
相关产品推荐
相关产品推荐

