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

如何重排嵌套列表cstates以匹配coords顺序并插入修改元素?

解决方案

我们可以利用集合操作定位被修改的元素对,再通过字典映射结合列表推导式快速生成符合原顺序的结果,全程使用Python内置功能,无需手动逐个遍历判断:

  1. 转换元素类型:将两个列表中的嵌套列表转为元组(列表不可哈希,无法作为集合元素或字典键)
  2. 定位修改元素:通过集合的差集找出原列表中被修改的元素,以及新列表中对应的修改后元素
  3. 构建映射关系:创建原元素到修改后元素的映射字典
  4. 生成目标列表:按原列表coords的顺序,通过字典映射替换对应元素,生成最终结果

代码实现

coords = [[4, 4], [5, 4], [6, 4], [6, 5], [6, 6], [5, 6], [4, 6], [4, 5]]
cstates = [[4, 4], [4, 5], [4, 6], [5, 4], [5, 6], [6, 4], [6, 5], [7, 6]]

# 转换为元组以便集合操作
coords_tuples = [tuple(pt) for pt in coords]
cstates_tuples = [tuple(pt) for pt in cstates]

# 找出原列表中被修改的元素,以及新列表中对应的修改后元素
original_modified = next(iter(set(coords_tuples) - set(cstates_tuples)))
new_modified = next(iter(set(cstates_tuples) - set(coords_tuples)))

# 构建替换映射
replace_map = {original_modified: new_modified}

# 按原顺序生成结果
result = [list(replace_map.get(pt, pt)) for pt in coords_tuples]

print(result)
# 输出: [[4, 4], [5, 4], [6, 4], [6, 5], [7, 6], [5, 6], [4, 6], [4, 5]]

说明

  • 集合差集操作能快速定位原列表存在但新列表缺失的元素(即被修改的原元素),以及新列表存在但原列表缺失的修改后元素
  • 字典的get方法会优先使用映射中的修改后元素,未被修改的元素则直接返回原内容
  • 列表推导式高效完成按原顺序的元素生成,全程依赖Python内置函数,符合要求的"预定义函数实现"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:55:18