You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现基于排序后列表的字符串列表重排功能

问题解决:基于字符串排序结果重排原列表

需求概述

给定初始字符串列表l,需按以下规则生成重排后的列表n:

  1. 对l中每个字符串单独排序,得到中间列表k(元素位置与原列表一一对应)
  2. 将k排序得到列表o
  3. 按照o的顺序,匹配原列表l中对应排序结果的元素,组成最终列表n

示例

l = ['cbc', 'adb', 'dab', 'acb', 'bbc', 'aca', 'bbb', 'aab', 'cad', 'bba']
print(f(l))  # 输出: ['aab', 'aca', 'bba', 'acb', 'adb', 'dab', 'cad', 'bbb', 'bbc', 'cbc']

小测试用例

  • 初始列表:l = ['be', 'tc', 'ka']
  • 中间列表k(每个元素为原元素排序结果):['be', 'ct', 'ak']
  • 排序后的o:['ak', 'be', 'ct']
  • 期望结果n:['ka', 'be', 'tc']

现有代码问题分析

你已经正确生成了中间列表transition_string(即k)和排序后的o,但后续的enu_list逻辑冗余且未完成重排核心步骤——需要关联排序结果与原列表元素,同时处理重复排序结果的顺序问题。


通用函数实现

def f(x):
    # 将每个原字符串、其排序结果、原索引绑定为元组
    paired_items = [("".join(sorted(s)), idx, s) for idx, s in enumerate(x)]
    # 先按排序后的字符串排序,排序结果相同时按原索引保持原顺序
    paired_items_sorted = sorted(paired_items, key=lambda item: (item[0], item[1]))
    # 提取排序后的原字符串,得到最终结果
    return [item[2] for item in paired_items_sorted]

# 验证示例
l = ['cbc', 'adb', 'dab', 'acb', 'bbc', 'aca', 'bbb', 'aab', 'cad', 'bba']
print(f(l))  # 输出符合预期

# 验证小测试用例
l_small = ['be', 'tc', 'ka']
print(f(l_small))  # 输出: ['ka', 'be', 'tc']

代码说明

  1. 绑定元组:通过enumerate获取原索引,将排序结果、原索引、原字符串打包,确保重复排序结果的元素能保留原列表中的相对顺序。
  2. 排序逻辑:使用sorted时,先以排序后的字符串为第一排序键,原索引为第二排序键,实现稳定排序。
  3. 提取结果:从排序后的元组列表中提取原字符串,得到重排后的最终列表。

内容的提问来源于stack exchange,提问作者Aggelos Kozonakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:55:21