我有一个列表列表。每个子列表中的第一个元素是一条染色体,例如“chr1”、“chr5”、“chr10”、“chrX”和“chrY”。我想按染色体编号然后按 X 和 Y 对子列表进行排序。我尝试了以下方法。
List.sort(key=lambda x: Set_Chr_Nr_(x[0]))
我正在使用以下 def,它采用染色体字符串,删除“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”的子列表开头,但接下来放置包含“chr10”的子列表,而不是“chr2”。我在这里做错了什么?
带有列标题的示例数据:
Type OriginChr OriginBegin OriginEnd DestChr DestBegin DestEnd
inversion chr10 13105010 13105143 chr10 13104876 13105378
inversion chr14 87902496 87902539 chr14 87902497 87902540
瑞克