python - Python在对列表中的数字进行排序时忽略零
问题描述
我正在尝试使用 python 的内置排序功能从最低到最高对美元金额列表进行排序,但是当我调用它时,它对数字的排序非常混乱。它从 10,000 美元开始,然后上升到 19,0000 美元(这是最高的)然后跳到 2,000 美元并从那里开始计数,表面上是因为 2 大于 1。我不知道如何纠正这一点。我使用的代码如下。
numbers=[['$10014.710000000001'], ['$10014.83'],['$11853.300000000001'],
['$19060.010000000006'],['$2159.1099999999997'],['$3411.1400000000003']]
print(sorted(numbers))
解决方案
您不是对数字而是对字符串进行排序,这解释了“奇怪”的结果。相反,将您的类型更改为浮动并对结果列表进行排序:
In [3]: sorted([[float(el[0][1:])] for el in numbers])
Out[3]:
[[2159.1099999999997],
[3411.1400000000003],
[10014.710000000001],
[10014.83],
[11853.300000000001],
[19060.010000000006]]
我需要,el[0]
因为每个数字都在它自己的列表中,这不是一个好的风格,但我想你有你的理由。剥去标志[1:]
。$
编辑评论中提出的非常好的观点。更强大的解决方案:
from decimal import Decimal
import decimal
decimal.getcontext().prec = 4
sorted([Decimal(el[0][1:]) for el in numbers])
Out[8]:
[Decimal('2159.1099999999997'),
Decimal('3411.1400000000003'),
Decimal('10014.710000000001'),
Decimal('10014.83'),
Decimal('11853.300000000001'),
Decimal('19060.010000000006')]
推荐阅读
- ffmpeg - pyav / libav / ffmpeg 当来自实时源的帧处理速度不够快时会发生什么
- c++ - 继承的静态工厂方法返回子类类型
- github-for-windows - Windows 上的 github 运行程序在 PowerShell 上找不到可执行文件
- docker - 无法通过 socks5 代理访问 docker 容器中的 10.0.0.0
- python - Python 抽象类和多重继承
- python - ubuntu pygame 窗口没有显示
- html - 如何使用 #anchor 触发 javascript 脚本
- java - 如何按对象的枚举属性对地图进行排序
- c# - 如何过滤列表类型的属性
使用 odata - binary - 来自二叉树的二元奖励