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

