[英]How to sort numeric strings with trailing zeroes in Python?
我想對數字字符串列表(帶尾隨零)進行排序,就像通常對數字進行排序一樣。 如果該列表中提供了數字字符串,我還想返回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。
Edit1:對不起,讓我不清楚。 讓我解釋一下我公司正在使用的編號系統:
系列A的第一個產品的ID:1.1
A系列第二個產品的ID:1.2
...
A系列第五十個產品的ID:1.50
B系列首個產品的ID:2.1
我只想對A系列的產品進行分類,然后對B系列的產品進行分類
因此,在我看來,1.5確實不同於1.50
一種使用re
模塊的解決方案:
import re
lst = ['1.1', '1.8', '1.50', '1.5', '1.9', '2.1']
l = sorted(lst, key=lambda k: [*map(int, re.findall(r'\d+', k))])
print(l)
打印:
['1.1', '1.5', '1.8', '1.9', '1.50', '2.1']
還是不用re
:
l = sorted(lst, key=lambda k: [*map(int, k.split('.'))])
print(l)
對於版本號,您可以使用distutils.version模塊(不幸的是,文獻記錄不多):
from distutils.version import LooseVersion # or StrictVersion
object_num = ['1.1', '1.8', '1.50', '1.5', '1.9', '2.1']
object_num.sort(key=LooseVersion)
print(object_num)
結果:
['1.1', '1.5', '1.8', '1.9', '1.50', '2.1']
它還將處理“ 1.5.2b2”之類的版本號(例如,針對Beta版本或發行候選版本)。 根據您的需要,您可以在LooseVersion
或StrictVersion
之間進行選擇(有關它們之間的區別,請參見文檔字符串)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.