首页 > 解决方案 > 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))

标签: python

解决方案


您不是对数字而是对字符串进行排序,这解释了“奇怪”的结果。相反,将您的类型更改为浮动并对结果列表进行排序:

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')]

推荐阅读