向Python排序添加额外规则

2024-09-24 06:26:23 发布

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

我想根据列表成员在字符串中的位置对其进行排序。但我也希望他们从最小到最大的长度订购。你知道吗

示例代码:

slist = ['ATSEVSPNSK',
 'AVSEHQLLHDK',
 'TPGKK',
 'LVQQWSVAVFLLSYAVPSCGRSVEGLSR',
 'FGSDDEGR',
 'PSPNTK',
 'NHPVRFGSDDEGR',
 'RLVQQWSVAVFLLSYAVPSCGR',
 'RAVSEHQLLHDK',
 'LVQQWSVAVFLLSYAVPSCGR',
 'EQEKK',
 'YLTQETNKVETYK',
 'RFFLHHLIAEIHTAEIR',
 'VETYK',
 'GKSIQDLR',
 'YLTQETNK',
 'FGSDDEGRYLTQETNK',
 'VETYKEQPLK',
 'GKPGK',
 'PSPNTKNHPVR',
 'FFLHHLIAEIHTAEIRATSEVSPNSK',
 'SIQDLRR',
 'AVSEHQLLHDKGK',
 'ATSEVSPNSKPSPNTK',
 'SIQDLR',
 'SVEGLSRR',
 'FFLHHLIAEIHTAEIR',
 'KEQEK',
 'EQPLKTPGK',
 'EQPLK',
 'NHPVR',
 'SVEGLSR']

sequence = 'MQRRLVQQWSVAVFLLSYAVPSCGRSVEGLSRRLKRAVSEHQLLHDKGKSIQDLRRRFFLHHLIAEIHTAEIRATSEVSPNSKPSPNTKNHPVRFGSDDEGRYLTQETNKVETYKEQPLKTPGKKKKGKPGKRKEQEKKKRRTRSAWLDSGVTGSGLEGDHLSDTSTTSLELDSRRH'

这就是我想改进的地方:

slist.sort(key=lambda x: sequences.find(x))

slist
Out[9]: 
['RLVQQWSVAVFLLSYAVPSCGR',
 'LVQQWSVAVFLLSYAVPSCGRSVEGLSR',
 'LVQQWSVAVFLLSYAVPSCGR',
 'SVEGLSRR',
 'SVEGLSR',
 'RAVSEHQLLHDK',
 'AVSEHQLLHDK',
 'AVSEHQLLHDKGK',
 'GKSIQDLR',
 'SIQDLRR',
 'SIQDLR',
 'RFFLHHLIAEIHTAEIR',
 'FFLHHLIAEIHTAEIRATSEVSPNSK',
 'FFLHHLIAEIHTAEIR',
 'ATSEVSPNSK',
 'ATSEVSPNSKPSPNTK',
 'PSPNTK',
 'PSPNTKNHPVR',
 'NHPVRFGSDDEGR',
 'NHPVR',
 'FGSDDEGR',
 'FGSDDEGRYLTQETNK',
 'YLTQETNKVETYK',
 'YLTQETNK',
 'VETYK',
 'VETYKEQPLK',
 'EQPLKTPGK',
 'EQPLK',
 'TPGKK',
 'GKPGK',
 'KEQEK',
 'EQEKK']

slist中较大版本的字符串是否排序在sequence中相同位置开始的字符串的上方或下方,取决于其在slist中的原始位置。一个例子是'LVQQWSVAVFLLSYAVPSCGRSVEGLSR''LVQQWSVAVFLLSYAVPSCGR'更靠前,相反的情况也适用于slist的其他成员,一些较小的字符串由于其在slist中的原始位置而排序在较大的字符串之上。你知道吗

我想保持我原来的分类方式。但我也希望在slist的成员中,在sequence的相同位置开始,较短的字符串排序在较长的字符串之上。你知道吗

有什么好办法吗?你知道吗


Tags: 字符串排序成员sequenceslistlvqqwsvavfllsyavpscgrsveglsravsehqllhdknhpvrfgsddegr