我的两分钱......这有一个定义订单的'patternList'变量。这可能是实现这一点的最简单(最易读、可扩展)的方法:没有凌乱的 if-else。此外,具有相同起始模式的列表项按字符串的其余部分排序。
这list1.sort(key = myKey)
意味着对于每个列表项myKey
功能在排序之前执行。函数仅以正常排序将执行您想要的方式myKey
修改已排序的列表项以进行排序。在输出排序列表中,未使用原始列表项(不是修改的项)。myKey
在下面的示例中,myKey 函数将列表项分成两部分,并根据 patternList 变量用整数标记第一部分。普通排序可以以您想要的方式处理返回的元组。
list1 = ['3DT1_PN_DIS3D_S001', '3DT1_PN_noDIS3D_S001', '3DT1_S001', '3DT1_noPN_DIS3D_S001']
list2 = ['3DT1_noPN_DIS3D_S002', '3DT1_PN_noDIS3D_S002', '3DT1_PN_DIS3D_S002', '3DT1_PN_DIS3D_S003', '3DT1_PN_DIS3D_S001']
def myKey(x):
# create the 'order list' for starting pattern
patternsList = [ '3DT1_S', '3DT1_noPN_DIS3D_S', '3DT1_PN_noDIS3D_S', '3DT1_PN_DIS3D_S']
for i in range(len(patternsList)): # iterate patterns in order
pattern = patternsList[i]
if x.find(pattern) == 0: # check if x starts with pattern
# return order value i and x without the pattern
return (i, x.replace(pattern, ''))
# if undefined pattern is found, put it to first
return (-1, x)
# alternatively if you want undefind to be last
# return (len(patternList)+1, x)
print list1
list1.sort(key = myKey)
print list1
print list2
list2.sort(key = myKey)
print list2