Python优雅的方式来排序数字命名的目录

Mad*_*ent 3 python sorting list

我有一系列目录都被命名为浮点值,例如:

0
1
2
2.5
6
6.1
10
Run Code Online (Sandbox Code Playgroud)

我想获得最后(最高)编号的目录.在目录名称(字符串)上使用sort()方法,我在1之后直接获得10.

dirs = os.listdir(path)
dirs.sort()
Run Code Online (Sandbox Code Playgroud)

这给出了顺序:

0
1
10
2
2.5
6
6.1
Run Code Online (Sandbox Code Playgroud)

我可以通过将每个浮点数转换为浮点数然后对列表进行排序将它们放入浮点列表中,从而解决了排序问题.但是当我返回字符串的值时,我得到10.0,这不是目录的名称.我需要它正好是"10"(或者无论最后一个目录是什么命名).

有一种优雅的方式来做到这一点?

Jon*_*fer 6

您可以使用key参数进行排序:

dirs = os.listdir(path)
dirs.sort(key=float)
Run Code Online (Sandbox Code Playgroud)

关键的参数必须是一个可调用的,将被要求在列表中的每个元素.然后,对可调用返回的值进行排序,而不修改列表项本身.

在这种情况下,我们使用floatcallable,它将返回传递给它的字符串表示的浮点值.

显然,这会爆发出没有浮动的字符串(ValueError),但这似乎超出了你的问题范围.

  • 如果你对最后排序的列表不感兴趣,你可以以同样的方式使用max builtin; `max(os.listdir(path),key = float)` - 它仍然会在后台对它们进行排序,但你可能更喜欢它的外观. (5认同)