使用子列表元素的一部分对列表列表进行排序

2024-06-08 18:22:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子。每个子列表中的第一个元素是染色体,如“chr1”、“chr5”、“chr10”、“chrX”和“chrY”。我想先按染色体数,然后按X和Y对子列表进行排序。在

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

我使用下面的def,它接受染色体字符串,删除'chr',如果余数是数字,则将余数转换为int;如果是'X'或'Y',则赋值一个数字。在

^{pr2}$

但它不会返回所需的排序顺序。相反,我得到的列表以包含“chr1”的子列表开头,但将包含“chr10”的子列表放在下一个,而不是“chr2”。我做错什么了?在

带列标题的示例数据:

Type    OriginChr   OriginBegin OriginEnd   DestChr DestBegin   DestEnd

inversion   chr10   13105010    13105143    chr10   13104876    13105378

inversion   chr14   87902496    87902539    chr14   87902497    87902540

瑞克


Tags: 元素列表排序数字inversionlist单子chr1
1条回答
网友
1楼 · 发布于 2024-06-08 18:22:19

你可以试试

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

如果你想用列表.排序(),您可以切换到

^{pr2}$

对于你的原始输入,如果列是固定的,这将起作用

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

相关问题 更多 >