Python - 排序列表中的列表

0 投票
6 回答
1626 浏览
提问于 2025-04-16 16:15

我有一个这样的列表:

exon_start exon_finish gene_name(这个格式重复了好几百次)

我想按照exon_start来排序。

示例列表:

 ['8342758', '8344137', 'NM_001042682']
 ['85420368', '85421471', 'NM_032184']
 ['86363115', '86364485', 'NM_152890']
 ['89820771', '89822936', 'NM_015350']
 ['904123', '905900', 'NR_027693']
 ['91176416', '91179454', 'NM_201269']
 ['92418409', '92420740', 'NM_015237']
 ['93575521', '93577419', 'NR_034089']
 ['94114411', '94116006', 'NM_014597']
 ['99926918', '99928016', 'NM_017734']

这个列表(上面打印的)已经用以下代码进行了排序:

sorted_triplets = sorted(triplets, key=lambda x: x[0])
for i in sorted_triplets:
    print i

但是,“sorted”并没有像我预期的那样工作。你可以从列表中看到,904123其实是比89820771小的。所以看起来“sorted”并不是把这些数字作为整体来比较,而是把它们当作一个个数字来比较。

我该怎么解决这个问题呢?

6 个回答

0

看起来你的“数字”其实是一个字符串。把这个字符串转换成整数(用 int(string) 这个方法),这样排序就应该能正常工作了。

1

把字符串转换成数字

sorted(triplets, key=lambda x: int(x[0]))
4

它把这些东西当作字符串来排序,所以排序的顺序是“按字母顺序”。也就是说,它是一个字母一个字母地比较,而不是把它们当作数字来比较。

所以你可以这样做:

sorted_triplets = sorted(triplets, key=lambda x: int(x[0]))

这样就应该能正常工作了。

撰写回答