Python - sort list of list
我有这种格式的清单:
exon_start exon_finish gene_name(重复数百次)
我想按exon_start排序
示例列表:
1 2 3 4 5 6 7 8 9 10 | ['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'] |
该列表列表(如上所示)已经使用以下代码进行了排序:
1 2 3 | sorted_triplets = sorted(triplets, key=lambda x: x[0]) for i in sorted_triplets: print i |
但是," sorted"不能按我预期的那样工作。 从列表中可以看出,904123小于89820771。因此,"排序"似乎不是在整体上比较数字,而是将各个数字进行比较。
我该如何解决?
它将它们作为字符串排序,因此顺序是"按字母顺序"。 也就是说,它逐个字符地进行比较,而不是将它们作为标量值进行比较。
这样:
1 | sorted_triplets = sorted(triplets, key=lambda x: int(x[0])) |
它应该工作。
将字符串转换为数字
1 | sorted(triplets, key=lambda x: int(x[0])) |
添加int()调用。
1 | sorted_triplets = sorted(triplets, key=lambda x: int(x[0])) |
看来您的"数字"实际上是一个字符串。 将此字符串转换为整数(int(string)),则排序应有效
是的,因为您拥有的是字符串,而不是数字。 它将按字典顺序排序。 您可能需要先将它们转换为数字(整数)。
将exon_start转换为整数,然后按字典顺序对字符串进行排序。