关于Python:Python-列表排序列表

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转换为整数,然后按字典顺序对字符串进行排序。