2011-04-22 24 views
0

的排序名单上有以下格式的列表: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 

但是,“排序”不像我所期望的那样工作。正如你从列表中看到的,904123小于89820771.所以看起来“排序”并不是将数字作为一个整体进行比较,而是将其作为单独的数字进行比较。

我该如何解决这个问题?

回答

4

它将它们排序为字符串,所以顺序是“按字母顺序排列”。也就是说,它逐个角色地进行比较,而不是将它们作为标量值进行比较。

所以做:

sorted_triplets = sorted(triplets, key=lambda x: int(x[0])) 

,它应该工作。

+0

哦。现在我甚至觉得自己很愚蠢。说得通。谢谢! – 2011-04-22 17:50:28

+0

我已经部分地教会了自己的perl,然后想,“为什么不试试python”。我仍然习惯于不得不明确告诉python什么是整数。 – 2011-04-22 17:51:53

+0

我不知道很多perl,但我总是讨厌PHP中的'自动转换'的东西。我喜欢一种强迫我明确表达的语言。 – colinmarc 2011-04-22 17:55:28

0

将exon_start转换为整数,字符串按照字典顺序排序。

1

将字符串转换为数字

sorted(triplets, key=lambda x: int(x[0])) 
0

对的,因为你有什么是字符串,而不是数字。它将按照字典顺序排序。您可能首先要将它们转换为数字(整数)。

0

看起来你的“数字”实际上是一个字符串。将此字符串转换为整数(int(string)),然后排序应该工作

0

添加int()调用。

sorted_triplets = sorted(triplets, key=lambda x: int(x[0]))