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
相关产品推荐
相关产品推荐

