Python - 列表的排序列表

时间:2011-04-22 17:41:01

标签: python list sorting

我有这种格式的列表:

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.因此,“已排序”似乎不是将数字作为整体进行比较,而是将其作为单个数字进行比较。

我该如何解决这个问题?

6 个答案:

答案 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]))