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

如何使用sorted()依据原列表names的顺序对names_copy排序?

按指定列表顺序排序另一个列表

问题场景

给定两个列表示例:

names = ['Jack', 'Steve', 'Marc', 'Xavier', 'Bob']
names_copy = ['Steve', 'Marc', 'Xavier', 'Bob', 'Jack']

需要将names_copy按照names的现有顺序排序,最终结果为['Jack', 'Steve', 'Marc', 'Xavier', 'Bob']。

限制条件:names_copy是通过map创建的对象,无法使用.sort()方法,但可以使用sorted()函数。

解决方案

利用原列表names中元素的索引位置作为排序依据,给sorted()的key参数指定排序规则即可实现需求。

步骤1:创建元素到索引的映射字典

为了提升查找效率(尤其是列表元素较多时),先把names转换为元素到对应索引的映射:

name_index = {name: idx for idx, name in enumerate(names)}

步骤2:使用sorted()完成排序

直接通过上述字典获取每个元素在原列表中的位置,作为排序的key:

names = ['Jack', 'Steve', 'Marc', 'Xavier', 'Bob']
# 模拟通过map创建的names_copy对象
names_copy = map(str, ['Steve', 'Marc', 'Xavier', 'Bob', 'Jack'])

name_index = {name: idx for idx, name in enumerate(names)}
sorted_result = sorted(names_copy, key=lambda x: name_index[x])

print(sorted_result)  # 输出:['Jack', 'Steve', 'Marc', 'Xavier', 'Bob']

异常处理(可选)

如果names_copy中存在names里没有的元素,直接使用上述代码会抛出KeyError。可以通过dict.get()方法给这类元素指定默认排序位置(比如放到列表末尾):

sorted_result = sorted(names_copy, key=lambda x: name_index.get(x, len(names)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:40:39