首先,我发布此内容是因为当我在寻找以下问题的解决方案时,我在stackoverflow上找不到该解决方案。因此,我希望在此处增加一些知识库。
我需要处理目录中的某些文件,并且需要对文件进行数字排序。我lambda在wiki.python.org上找到了一些有关排序的示例(尤其是使用模式),并将它们放在一起:
lambda
#!env/python import re tiffFiles = """ayurveda_1.tif ayurveda_11.tif ayurveda_13.tif ayurveda_2.tif ayurveda_20.tif ayurveda_22.tif""".split('\n') numPattern = re.compile('_(\d{1,2})\.', re.IGNORECASE) tiffFiles.sort(cmp, key=lambda tFile: int(numPattern.search(tFile).group(1))) print tiffFiles
我对Python还是很陌生,想问一下社区是否可以对此进行任何改进:缩短代码(删除lambda),性能,样式/可读性?
谢谢你,扎卡里
这称为“自然排序”或“人类排序”(与字典排序相反,这是默认设置)。 内德·B(Ned B)写了一个快速的版本。
import re def tryint(s): try: return int(s) except: return s def alphanum_key(s): """ Turn a string into a list of string and number chunks. "z23a" -> ["z", 23, "a"] """ return [ tryint(c) for c in re.split('([0-9]+)', s) ] def sort_nicely(l): """ Sort the given list in the way that humans expect. """ l.sort(key=alphanum_key)
它与您正在执行的操作类似,但可能更笼统。