基于python中的多个正则表达式组对字符串列表进行排序

Sos*_*osi 1 python sorting list

我有一个以下形式的字符串列表:

my_list=['i99_W_t10', 'i99_M_t11', 'i94_M_t12', 'i93_W_t2', ..., 'i14_M_t19']
Run Code Online (Sandbox Code Playgroud)

(所以总是用 分隔 3 个字段_。我想首先按第二个元素对这个列表进行排序,然后是第三个元素,然后是第一个元素。所以上面的列表将变成:

my_list=['i99_M_t11',  'i94_M_t12', 'i14_M_t19', 'i93_W_t2', 'i99_W_t10', ... ]
Run Code Online (Sandbox Code Playgroud)

我知道如何通过将列表转换为 pandas 数据框、将字段拆分为列、对它们进行排序并返回排序后的列表来实现此目的。但也许有一种更优雅的方式直接在列表上完成,而不必去寻找数据帧?

Iai*_*ton 5

拆分每个字符串'_',然后使用operator.itemgetter按特定顺序从每个列表中提取项目

from operator import itemgetter
my_list=['i99_W_t10', 'i99_M_t11', 'i94_M_t12', 'i93_W_t2','i14_M_t19']
key_func = lambda x: itemgetter(1, 2, 0)(x.split('_'))
sorted(my_list, key=key_func)
# ['i99_M_t11', 'i94_M_t12', 'i14_M_t19', 'i99_W_t10', 'i93_W_t2']
Run Code Online (Sandbox Code Playgroud)

itemgetter 的实际应用示例

itemgetter(1, 2, 0)(['a', 'b', 'c'])
# ('b', 'c', 'a')

itemgetter(2, 1, 0)(['a', 'b', 'c'])
# ('c', 'b', 'a')
Run Code Online (Sandbox Code Playgroud)