簡體   English   中英

如何在Python中對帶有結尾零的數字字符串進行排序?

[英]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版本或發行候選版本)。 根據您的需要,您可以在LooseVersionStrictVersion之間進行選擇(有關它們之間的區別,請參見文檔字符串)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM