0

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

A1, A2, A3,..., A10, A11,..., B1,B2, ..., B10, B11 ...

问题是,当我尝试使用 Python 按字母顺序对其进行排序时:

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

我得到了以下命令:

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

所以我的问题是我怎样才能先按字母顺序排序,然后用数字排序

4

1 回答 1

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'),它会移动到下一对值(2这里11)。由于这两个都是整数,因此它会按数字对它们进行排序。它使用该排序对原始列表进行排序。

于 2013-09-27T03:40:52.020 回答