【问题标题】:Python - sort list of listPython - 对列表进行排序
【发布时间】:2011-04-22 17:41:00
【问题描述】:

我有一个这种格式的列表:

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

我该如何解决这个问题?

【问题讨论】:

    标签: python list sorting


    【解决方案1】:

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

    这样做:

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

    它应该可以工作。

    【讨论】:

    • 我已经部分自学了 perl,然后想,“为什么不试试 python”。我仍然习惯于必须明确告诉 python 什么是整数。
    • 我对 perl 了解不多,但我一直讨厌 P​​HP 中的“自动转换”。我喜欢一种强迫我表达的语言。
    • 当然可以,但在这种情况下,为什么不必明确定义数据类型是元组、列表还是字典? (这是一个反问——我不是在寻找答案)
    【解决方案2】:

    将字符串转换为数字

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        是的,因为您拥有的是字符串,而不是数字。它将按字典顺序排序。您可能需要先将它们转换为数字(整数)。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            添加 int() 调用。

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

            【讨论】:

              猜你喜欢
              • 2018-04-17
              • 1970-01-01
              • 2013-10-12
              • 2013-12-18
              • 2012-11-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多