📜  Python - 按列表中的单位数字排序(1)

📅  最后修改于: 2023-12-03 15:33:57.055000             🧑  作者: Mango

Python - 按列表中的单位数字排序

在Python中,我们可以使用sorted()函数来对列表进行排序。但是,如果列表中包含的是单位数字(例如:10KB,20MB等),如果按照默认的方法排序,结果将不是按照数字大小的顺序排列的。那么,该如何才能按照数字大小的顺序来排序呢?

这里提供两种方法:

方法一:自定义排序函数

我们可以先定义一个函数custom_sort(),该函数根据单位数字转换为字节大小后再进行比较,然后将该函数作为sorted()函数的参数即可。

def custom_sort(n):
    size = ["B", "KB", "MB", "GB", "TB", "PB"]
    for i, s in enumerate(size):
        if n.endswith(s):
            return int(float(n.replace(s, "")) * (1024 ** i))
    return int(n)

lst = ["10KB", "20MB", "30B", "1GB", "5TB", "100MB"]
sorted_lst = sorted(lst, key=custom_sort)
print(sorted_lst) # ['30B', '10KB', '100MB', '20MB', '1GB', '5TB']

上述代码中,custom_sort()函数中定义了一个size列表,表示单位的大小顺序,即["B", "KB", "MB", "GB", "TB", "PB"]。接着使用enumerate()函数遍历这个列表中的元素,使用字符串的endswith()方法判断列表中的哪个单位与原数据中相符,并据此,用字符串的replace()方法去除末尾的单位,并乘以单位对应的字节数,最终返回数字类型的大小。当遍历完整个列表后,如果没有匹配到任何单位,则直接返回字符串转换后的数字。

custom_sort()函数中,我们将每个单位转换为其对应的字节数,然后根据这个字节数进行比较,即可实现按照数字大小的顺序排序。

方法二:使用lambda表达式

在Python中,我们还可以使用lambda表达式(匿名函数)来直接实现按照单位数字大小的顺序进行排序。

lst = ["10KB", "20MB", "30B", "1GB", "5TB", "100MB"]
sorted_lst = sorted(lst, key=lambda x: int(float(x[:-2]) * {"B": 0, "KB": 1, "MB": 2, "GB": 3, "TB": 4, "PB": 5}[x[-2:]]))
print(sorted_lst) # ['30B', '10KB', '100MB', '20MB', '1GB', '5TB']

上述代码中,我们使用一个lambda表达式作为sorted()函数的参数,该表达式先使用切片运算符[:-2]去除原数据中的单位,然后再将单位转换为对应的字节数,并乘以数值大小,最终返回数值大小。我们将这个表达式作为sorted()函数的参数中的key参数,使其按照数字大小的顺序进行排序。

以上就是按照单位数字排序的两种方法。无论您选择哪种方法,都可以很方便地实现按照数字大小的顺序进行排序。