私の 2 セント... これには、順序を定義する「patternList」変数があります。これはおそらくこれを実装するための最も簡単な (最も人間が読みやすく、拡張可能な) 方法です: 面倒な if-else はありません。また、開始パターンが同じリスト項目は、文字列の残りの順に並べられます。
並べ替えの前list1.sort(key = myKey)
に各リスト項目myKey
関数が実行されることを意味します。関数は、通常の並べ替えが希望どおりに行われる方法でのみ、並べ替えの目的で並べmyKey
替えられたリスト項目を変更します。出力ソート済みリストでは、元のリスト項目は使用されません (変更されたものではありません)。myKey
以下の例では、myKey 関数はリスト項目を 2 つの部分に分割し、最初の部分に 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