通过非零填充数字串的数字解释对元组列表进行排序

Ssa*_*ank 0 python sorting

我有一个python列表

l = [('insert_0', 'gtttaattgag'), ('insert_1', 'tttaattgagt'), ('insert_10', 'gttgtcatatg'), ('insert_11', 'ttgtcatatgt'), ('insert_12', 'tgtcatatgtt'), ('insert_2', 'ttaattgagtt'), ('insert_3', 'taattgagttg'), ('insert_4', 'aattgagttgt'), ('insert_5', 'attgagttgtc'), ('insert_6', 'ttgagttgtca'), ('insert_7', 'tgagttgtcat'), ('insert_8', 'gagttgtcata'), ('insert_9', 'agttgtcatat')]
Run Code Online (Sandbox Code Playgroud)

我希望它排序,看起来像

l_needed = [('insert_0', 'gtttaattgag'), ('insert_1', 'tttaattgagt'),('insert_2', 'ttaattgagtt'),('insert_3', 'taattgagttg'), ('insert_4', 'aattgagttgt'), ('insert_5', 'attgagttgtc'), ('insert_6', 'ttgagttgtca'), ('insert_7', 'tgagttgtcat'), ('insert_8', 'gagttgtcata'), ('insert_9', 'agttgtcatat'),('insert_10', 'gttgtcatatg'), ('insert_11', 'ttgtcatatgt'), ('insert_12', 'tgtcatatgtt'),..]
Run Code Online (Sandbox Code Playgroud)

ie l按下标的升序排序"insert".我试过 l.sort()不生产l_needed.你能建议编辑吗?

Fin*_*ood 5

您可以拆分数字并将其转换为整数:

In [7]: sorted(l, key=lambda x: int(x[0].rsplit('_', 1)[-1]))
Out[7]:
[('insert_0', 'gtttaattgag'),
 ('insert_1', 'tttaattgagt'),
 ('insert_2', 'ttaattgagtt'),
 ('insert_3', 'taattgagttg'),
 ('insert_4', 'aattgagttgt'),
 ('insert_5', 'attgagttgtc'),
 ('insert_6', 'ttgagttgtca'),
 ('insert_7', 'tgagttgtcat'),
 ('insert_8', 'gagttgtcata'),
 ('insert_9', 'agttgtcatat'),
 ('insert_10', 'gttgtcatatg'),
 ('insert_11', 'ttgtcatatgt'),
 ('insert_12', 'tgtcatatgtt')]
Run Code Online (Sandbox Code Playgroud)