Python 根据某些字符对列表中的子列表进行排序

Python 根据某些字符对列表中的子列表进行排序,python,regex,list,Python,Regex,List,Hel lo我需要一些帮助,以便根据一些字符在列表中对子列表进行排序 以下是一个例子: 我有一份清单: List [['QANH01000554.1_32467-32587_+__Sp_1', 'QANH01000554.1_32371-32464_+__Sp_1'], ['QANH01000809.1_27675-27794_-__Sp_1', 'QANH01000809.1_27798-27890_-__Sp_1']] 我想得到: [['QANH01000554.1_32467-32587

Hel lo我需要一些帮助,以便根据一些字符在列表中对子列表进行排序

以下是一个例子:

我有一份清单:

List
[['QANH01000554.1_32467-32587_+__Sp_1', 'QANH01000554.1_32371-32464_+__Sp_1'], ['QANH01000809.1_27675-27794_-__Sp_1', 'QANH01000809.1_27798-27890_-__Sp_1']]
我想得到:

[['QANH01000554.1_32467-32587_+__Sp_1', 'QANH01000554.1_32371-32464_+__Sp_1'], [ 'QANH01000809.1_27798-27890_-__Sp_1','QANH01000809.1_27675-27794_-__Sp_1']]
因此,我想迭代每个子列表,如果有
-
,那么我想用
[\d]+[-]+[\d]
对子列表进行排序(第一个[\d]是最高的)

正如您可以在子列表中看到的那样

['QANH01000809.1_27675-27794_-__Sp_1', 'QANH01000809.1_27798-27890_-__Sp_1']
27798>27675
所以我改为

['QANH01000809.1_27798-27890_-__Sp_1','QANH01000809.1_27675-27794_-__Sp_1']

这是一种使用带有自定义键的
排序
的方法

Ex:

import re  
data = [['QANH01000554.1_32467-32587_+__Sp_1', 'QANH01000554.1_32371-32464_+__Sp_1'], ['QANH01000809.1_27675-27794_-__Sp_1', 'QANH01000809.1_27798-27890_-__Sp_1']]
print([sorted(i, key=lambda x: tuple(int(n) for n in re.search(r"(\d+)\-(\d+)", x).groups()), reverse=True) for i in data])
[['QANH01000554.1_32467-32587_+__Sp_1', 'QANH01000554.1_32371-32464_+__Sp_1'], ['QANH01000809.1_27798-27890_-__Sp_1', 'QANH01000809.1_27675-27794_-__Sp_1']]
输出:

import re  
data = [['QANH01000554.1_32467-32587_+__Sp_1', 'QANH01000554.1_32371-32464_+__Sp_1'], ['QANH01000809.1_27675-27794_-__Sp_1', 'QANH01000809.1_27798-27890_-__Sp_1']]
print([sorted(i, key=lambda x: tuple(int(n) for n in re.search(r"(\d+)\-(\d+)", x).groups()), reverse=True) for i in data])
[['QANH01000554.1_32467-32587_+__Sp_1', 'QANH01000554.1_32371-32464_+__Sp_1'], ['QANH01000809.1_27798-27890_-__Sp_1', 'QANH01000809.1_27675-27794_-__Sp_1']]