リストのリストがあります。各サブリストの最初の要素は、「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
リック