【发布时间】:2019-08-09 15:49:58
【问题描述】:
我想对数字字符串列表(带尾随零)进行排序,就像您通常对数字进行排序一样。如果提供的数字字符串在该列表中,我还想返回 True bool。
例子:
old_list = [1.1, 1.8, 1.50, 1.5, 1.9, 2.1]
到
sorted = [1.1, 1.5, 1.8, 1.9, 1.50, 2.1]
因此,显然小数被视为数字并像数字一样排序。 1.50 不应该简化为 1.5 等。它用于我公司的产品 id,已经困扰我一年了。
我尝试将数字字符串转换为 str 然后排序。 我也尝试使用 Decimal 模块,但它会将 1.1 变成 1.10000000000000008881 之类的...
这是我使用的代码:
object_num = list(map(str, ['1.1', '1.8', '1.50', '1.5', '1.9', '2.1']))
object_num.sort()
print(object_num)
结果:
['1.1', '1.5', '1.50', '1.8', '1.9', '2.1']
我很欣赏 Python 足够聪明,可以对列表进行数字排序,但我希望它也能得到这样的结果:
sorted = [1.1, 1.5, 1.8, 1.9, 1.50, 2.1]
当我输入时
print(1.50 in sorted)
它可以返回 True。
编辑1: 很抱歉没有让自己清楚。让我解释一下我公司使用的编号系统:
A 系列第一个产品的 ID:1.1
A 系列第二个产品的 ID:1.2
...
A 系列第 50 款产品的 ID:1.50
B 系列第一个产品的 ID:2.1
我只想先从 A 系列中排序产品,然后是 B 系列
因此,就我而言,1.5 确实与 1.50 不同
【问题讨论】:
-
为什么
1.50会大于1.9?看来您确实不希望将它们视为小数,而是将它们视为元组 -1, 50和1, 9。 -
如果产品很多,可能会有set的用途。它的存在性检查速度要快得多,但它在排序方面表现不佳。
-
哦,1.50 是(一,五十)抱歉完全误解了。
-
我也想知道是谁发明了这个编号系统
-
“就像你通常如何对数字进行排序”并不是对你在这里想要实现的目标的非常清晰的描述。通常,我认为 5 小于 50(而 1.5 与 1.50 相同)。您的意思是“您通常如何对 版本号 进行排序”?
标签: python sorting decimal zero trailing