Python 根据某些字符对列表中的子列表进行排序
Hel lo我需要一些帮助,以便根据一些字符在列表中对子列表进行排序 以下是一个例子: 我有一份清单: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
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']]