Python - 排序列表中的列表
我有一个这样的列表:
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]))
这样就应该能正常工作了。