如果我没弄错的话,你的最终目标是对子序列进行排序,
而不涉及子序列的项。在
在您的示例中,子序列定义为以“B”开头的项。
你的示例列表正好包含按字典顺序排列的项,
有点太方便了,
可能会分散注意力,无法找到一个广义解。
让我们用一个不同的例子把事情搞混。
怎么样:
^{1}$
在这里,物品不再被订购(至少我试着整理它们,这样它们就不会被订购了),无论是以“B”开头的物品,还是其他物品。
然而,以“B”开头的项目仍然形成单个连续的子序列,占据单个范围1-6,而不是分割范围,例如0-3和6-7。
这可能会让人分心,我将进一步讨论这一方面。在
如果我正确理解您的最终目标,您希望以下列表按如下方式排序:
^{pr2}$
为了实现这一点,我们需要一个返回元组的键函数,这样:第一个值:
如果项不是以“B”开头,则原始列表中的索引(或按相同顺序排列的值)
如果项以“B”开头,则最后一个不以“B”开头的项的索引
第二个值:
如果该项不是以“B”开头,则省略此项
如果项目以“B”开头,则数值
可以这样实现,并且使用一些^{}:def order_sublist(items):
"""
>>> order_sublist(['A', 'B2', 'B11', 'B22', 'B', 'B1', 'B21', 'C', 'C1', 'C11', 'C2'])
['A', 'B', 'B1', 'B2', 'B11', 'B21', 'B22', 'C', 'C1', 'C11', 'C2']
>>> order_sublist(['X', 'B2', 'B11', &#