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

Python如何根据公共元素调整列表的元素顺序?

实现方法

你可以直接用sorted()函数自定义排序规则实现需求,代码如下:

l1 = ['foo_x', 'bar_x', 'xyz_x', 'foo_y', 'bar_y', 'xyz_y']
l2 = ['foo', 'bar', 'xyz']

# 方法1:自定义排序key实现
result = sorted(l1, key=lambda s: (l2.index(s.split('_')[0]), s.split('_')[1]))
print(result)
# 输出:['foo_x', 'foo_y', 'bar_x', 'bar_y', 'xyz_x', 'xyz_y']

逻辑说明

  • 排序key的第一维度:将元素按下划线_拆分取前缀,匹配前缀在l2中的索引,保证整体顺序完全贴合l2的前缀优先级
  • 排序key的第二维度:取拆分后的后缀,保证同前缀下x排在y前面

如果偏好使用列表推导式实现,也可以按前缀遍历拼接:

# 方法2:列表推导式实现
result = [item for prefix in l2 for item in sorted(i for i in l1 if i.startswith(prefix))]

原有代码错误原因

你写的列表推导式[i for i in l1 if (l2 in l1)]的判断条件逻辑完全错误:l2 in l1是判断整个l2列表是不是l1的元素,这个判断永远返回False,所以最终只会得到空列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:04