2017-08-08 49 views
-1

假设:我有目录名称:DIR1 方向1/排序目录

A_Y2016W25 
A_Y2017W15 
B_Y2017W30 
A_Y2016W20 
B_Y2017W35 
A_Y2017W30 

我想YXXXX和WXX和打印这是为了对它进行排序:

A_Y2016W20 
A_Y2016W25 
A_Y2017W15 
A_Y2017W30 

B_Y2017W30 
B_Y2017W35 

我如何使用排序?

+3

你尝试过什么?请先尝试编写代码并发布一些样本以获得更多帮助。 – thaavik

回答

0

你可以做到这一点 -

a = ['A_Y2016W25', 'A_Y2017W15', 'B_Y2017W30', 'A_Y2016W20', 'B_Y2017W35', 'A_Y2017W30'] 

def ext(strng): 
    return ord(strng[0]), int(strng[3:7]), int(strng[8:]) 

a.sort(key = ext) #['A_Y2016W20', 'A_Y2016W25', 'A_Y2017W15', 'A_Y2017W30', 'B_Y2017W30', 'B_Y2017W35'] 
+2

这是一个基本的排序过程()将在他的上下文中为OP的问题做好工作。 – Fabien

3
>>> a = ['A_Y2016W25', 'A_Y2017W15', 'B_Y2017W30', 'A_Y2016W20', 'B_Y2017W35', 'A_Y2017W30'] 
>>> a.sort() 
>>> a 
['A_Y2016W20', 'A_Y2016W25', 'A_Y2017W15', 'A_Y2017W30', 'B_Y2017W30', 'B_Y2017W35'] 

将做的工作。

实际上,您不需要执行任何类型的子字符串,因为您已经在要执行的排序中保持优先顺序。

0

使用sort()与基于正则表达式的关键功能类似这样的例子另一种方法:

import re 

def sort_regex(regex, a): 
    data = re.search(regex, a) 
    return data.group(0) if data else '' 

a = ['A_Y2016W25', 'A_Y2017W15', 'B_Y2017W30', 'A_Y2016W20', 'B_Y2017W35', 'A_Y2017W30'] 

a.sort(key=lambda x: sort_regex(r'Y\d{4}', x)) 
print(a) 

a.sort(key=lambda x: sort_regex(r'W\d{2}', x)) 
print(a) 

a.sort(key=lambda x: sort_regex(r'Y\d{4}W\d{2}', x)) 
print(a) 

输出:

['A_Y2016W25', 'A_Y2016W20', 'A_Y2017W15', 'B_Y2017W30', 'B_Y2017W35', 'A_Y2017W30'] 
['A_Y2017W15', 'A_Y2016W20', 'A_Y2016W25', 'B_Y2017W30', 'A_Y2017W30', 'B_Y2017W35'] 
['A_Y2016W20', 'A_Y2016W25', 'A_Y2017W15', 'B_Y2017W30', 'A_Y2017W30', 'B_Y2017W35']