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

Python中如何按另一列表的自定义顺序对字符串列表排序

实现方法与原理解释

1 核心实现代码

你可以直接通过Python内置list.sort()的key参数实现需求,代码如下:

example_list = ['h1','ee1','hi1','ol1','b1','ol1','b1']
order_list = ['ee','hi','h','b','ol']

# 构建优先级映射字典
order_priority = {prefix: index for index, prefix in enumerate(order_list)}

# 按指定规则排序
example_list.sort(key=lambda item: order_priority[item[:-1]])

print(example_list)
# 输出结果:['ee1', 'hi1', 'h1', 'b1', 'b1', 'ol1', 'ol1']

如果你想要实现你提到的example_list.sort(use_order_of=order_list)调用格式,可以扩展内置list的方法:

# 扩展自定义排序方法
def order_sort(self, use_order_of):
    order_priority = {prefix: index for index, prefix in enumerate(use_order_of)}
    self.sort(key=lambda item: order_priority[item[:-1]])

list.order_sort = order_sort

# 调用方式完全符合你的预期
example_list.order_sort(use_order_of=order_list)

2 原理解释

  • 首先构建order_priority字典:将order_list里的前缀和它的下标做映射,下标越小代表排序优先级越高,字典的查询效率是O(1),比直接用list.index()查找的O(n)效率高很多,数据量越大优势越明显。
  • 排序时传入的key函数会对每个元素做处理:因为所有元素末尾字符一致,我们用item[:-1]切掉每个元素的最后一位得到前缀,再查前缀对应的优先级序号,sort方法会默认按序号从小到大排序,最终得到你需要的结果。

3 兼容处理

如果你的列表里存在不在order_list里的前缀,不想触发KeyError的话,可以修改key函数的取值逻辑,把未知前缀统一排在最后:

example_list.sort(key=lambda item: order_priority.get(item[:-1], len(order_list)))

内容的提问来源于stack exchange,提问作者Deera Wijesundara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:30:00