1

リストのリストがあります。各サブリストの最初の要素は、「chr1」、「chr5」、「chr10」、「chrX」、「chrY」などの染色体です。サブリストを染色体番号で並べ替え、次に X と Y で並べ替えたいと思います。次のことを試しました。

List.sort(key=lambda x: Set_Chr_Nr_(x[0]))

私は次の定義を使用しています。これは、染色体文字列を取得し、「chr」を削除し、残りが数値の場合は int に変換し、「X」または「Y」の場合は数値を割り当てます。

def Set_Chr_Nr_ (Chr):
    """ Sort by chromosome """
    if Chr: 
        New = Chr[3:]
        if New == 'X': New = 23
        elif New == 'Y': New = 24
        elif New == 'M': New = 25
        else: New = int(New)
    else:
        New = 0
    return New

ただし、目的の並べ替え順序は返されません。代わりに、「chr1」を含むサブリストで始まるリストを取得しますが、「chr2」ではなく「chr10」を含むサブリストを次に配置します。ここで何が間違っていますか?

列ヘッダーのあるデータの例:

Type    OriginChr   OriginBegin OriginEnd   DestChr DestBegin   DestEnd

inversion   chr10   13105010    13105143    chr10   13104876    13105378

inversion   chr14   87902496    87902539    chr14   87902497    87902540

リック

4

1 に答える 1

1

あなたが試すことができます、

a = ['chr1', 'chr10', 'chr5', 'chrX']
sorted(a, key=lambda x: Set_Chr_Nr_(x))
print a

list.sort() を使用する場合は、次のように切り替えることができます。

a.sort(lambda x,y: x-y, key=lambda x: Set_Chr_Nr_(x))

元の入力の場合、列が固定されている場合、これは機能しますが、

a = [['inversion', 'chr14', 87902496, 87902539, 'chr14', 87902497, 87902540], ['inversion', 'chr10', 13105010, 13105143, 'chr10', 13104876, 13105378]]
sorted(a, key=lambda x: Set_Chr_Nr_(x[1]))
print a
于 2013-01-18T16:35:46.300 に答える