gpt4 book ai didi

Python 在对列表中的数字进行排序时忽略零

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:51 25 4
gpt4 key购买 nike

我正在尝试使用 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))

最佳答案

这里的关键见解是列表中的值实际上是字符串,并且字符串是按词法比较的:字符串中的每个字符一次比较一个,直到第一个不匹配的字符。所以“aa”排在“ab”之前,但这也意味着“a1000”排在“a2”之前。如果你想以不同的方式排序,你需要告诉 sort 方法(或 sorted 函数)你想要排序的依据是什么。

在这种情况下,您可能应该使用decimal 模块。您需要 sort 方法的 key 属性。这将对您现有的列表进行排序,仅在排序过程中使用转换后的值。

import decimal

def extract_sortable_value(value):
# value is a list, so take the first element
first_value = value[0]
return decimal.Decimal(first_value.lstrip('$'))

numbers.sort(key=extract_sortable_value)

等价地,你可以这样做:

print(sorted(numbers, key=extract_sortable_value))

演示:https://repl.it/repls/MiserableDarkPatches

关于Python 在对列表中的数字进行排序时忽略零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53797786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com