Python按字母顺序排序,不包含小于10的数字的前置零

时间:2013-09-27 03:37:58

标签: python

我想用Python列出一个目录。我的目录只有名称为

的文件
A1, A2, A3,..., A10, A11,..., B1,B2, ..., B10, B11 ...

问题是,当我按字母顺序尝试用Python命令时:

listQuery = os.listdir('C:\\query\\')
listQuery.sort()

我收到了以下命令:

A1, A10, A11, ... ,A2 ... 

所以我的问题是我怎么能先按字母顺序排序,然后用数字命名呢

1 个答案:

答案 0 :(得分:1)

制作排序键功能,例如:

def my_order(value):
    return (value[0], int(value[1:]))

然后用它来对你的清单进行排序:

listQuery.sort(key=my_order)

这会对列表中的每个值调用my_order函数,然后根据这些新计算的值对列表进行排序。这也被称为“装饰 - 排序 - 未装饰”(“DSU”)或“施瓦茨变换”。

在这种情况下,它会创建一个元组列表,如('A', 2)('A', 11)等.Python根据各个值对元组进行排序。如果两个元组具有相同的第一个值(如'A'),则会转到下一对值(此处为211)。因为这两个都是整数,所以它会用数字排序。它使用该排序对原始列表进行排序。