我有这种格式的列表:
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
然而,“排序”并不像我期望的那样工作。正如您从列表中看到的那样,904123小于89820771.因此,“已排序”似乎不是将数字作为整体进行比较,而是将其作为单个数字进行比较。
我该如何解决这个问题?
答案 0 :(得分:4)
它将它们排序为字符串,因此顺序是“按字母顺序”。也就是说,它逐个字符和比较,而不是将它们作为标量值进行比较。
所以:
sorted_triplets = sorted(triplets, key=lambda x: int(x[0]))
它应该有用。
答案 1 :(得分:1)
将字符串转换为数字
sorted(triplets, key=lambda x: int(x[0]))
答案 2 :(得分:0)
将exon_start转换为整数,字符串按字典顺序排序。
答案 3 :(得分:0)
是的,因为你拥有的是字符串,而不是数字。它将按字典顺序排序。您可能希望首先将它们转换为数字(整数)。
答案 4 :(得分:0)
看起来你的“号码”实际上是一个字符串。将此字符串转换为整数(int(字符串)),然后排序应该起作用
答案 5 :(得分:0)
添加int()调用。
sorted_triplets = sorted(triplets, key=lambda x: int(x[0]))