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

Python如何去除3元素元组列表中元素相同顺序不同的重复项

原有代码错误原因

你写的列表推导式仅校验了(z, x, y)这一种特定排列是否存在,既没有覆盖3元素元组的全部排列情况,且当两个互为排列的元组同时存在时,二者都会被判定为“存在对应排列项”被过滤,最终得到空列表。


正确实现方案

核心思路是给每个元组生成和顺序无关的唯一标识(排序后的元组),用集合记录已经出现过的标识,遍历原始列表时仅保留首次出现的对应元组即可。

基础实现(可读性更高)

slices = [('location', 'region', 'sub_region'),
 ('location', 'sub_region', ' job_level'),
 ('sub_region', 'region', 'location')]

seen = set()
new_slices = []
for item in slices:
    # 对元组内元素排序后转元组作为唯一键,相同元素不同顺序的元组键值一致
    unique_key = tuple(sorted(item))
    if unique_key not in seen:
        seen.add(unique_key)
        new_slices.append(item)

执行后new_slices的输出就是预期结果:

[('location', 'region', 'sub_region'), ('location', 'sub_region', ' job_level')]

单行列表推导式实现

如果偏好列表推导式写法,可以用下面的方式实现:

seen = set()
new_slices = [item for item in slices if tuple(sorted(item)) not in seen and not seen.add(tuple(sorted(item)))]

这里利用了set.add()方法返回None,not None等价于True的特性,保证仅当键未出现过的时候才会执行添加操作,不影响条件判断逻辑。


内容的提问来源于stack exchange,提问作者J. Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:27:03