python中具有多个条件的排序列表

2024-03-28 19:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我正在尝试对由版本号组成的文件列表进行排序。例如:

0.0.0.0.py
1.0.0.0.py
1.1.0.0.py

它们都存储在一个列表中。我的想法是将列表的sort方法与lambda表达式结合使用。lambda表达式应该首先删除.py扩展名,然后按点分割字符串。而不是把每个数字都转换成一个整数并按它们排序。在

我知道如何在c#中实现这一点,但我不知道如何使用python实现这一点。一个问题是,我如何才能在多个条件下进行排序?如何嵌入lambda表达式?在

有人能帮我吗?在

非常感谢!在


Tags: 文件方法lambda字符串py列表排序表达式
3条回答

您可以使用sorted函数的键参数:

filenames = [
    '1.0.0.0.py',
    '0.0.0.0.py',
    '1.1.0.0.py'
]

print sorted(filenames, key=lambda f: map(int, f.split('.')[:-1]))

结果:

^{pr2}$

lambda将文件名拆分为多个部分,删除最后一个部分并将其余部分转换为整数。然后sorted使用这个值作为排序标准。在

# read list in from memory and store as variable file_list
sorted(file_list, key = lambda x: map(int, x.split('.')[:-1]))

如果你想知道这是怎么回事:

我们的lambda函数首先获取文件名,然后将其拆分为一个由句点分隔的数组。然后我们获取列表中的所有元素,减去最后一个元素,即文件扩展名。然后我们将'int'函数应用到列表的每个元素。然后,返回的列表由“sorted”函数根据列表的元素进行排序,首先从第一个开始,然后由列表中后面的元素断开。在

让您的key函数返回项目列表。在这种情况下,排序是字典式的。在

l = [ '1.0.0.0.py', '0.0.0.0.py', '1.1.0.0.py',]
s = sorted(l, key = lambda x: [int(y) for y in x.replace('.py','').split('.')])
print s

相关问题 更多 >