Python如何删除嵌套元组列表中首元素重复的元组并修正无效代码
问题原因
你写的代码判断逻辑存在错误:你当前判断 tup[0] not in new_tup_lst,但new_tup_lst里存储的是完整的元组对象(比如('B', '28D')),而tup[0]是字符串类型的首元素(比如'B'),二者类型和内容都不匹配,所以这个判断永远返回True,所有元组都会被添加到新列表中,最终输出和原列表完全一致。
修正方案
你需要额外用一个单独的集合来记录已经出现过的元组首元素,判断逻辑改为校验当前元组的首元素是否在已出现的集合中即可,修正后的代码如下:
tup_list = [[('A', '10'), ('B', '28D'), ('C', '14'),('B','70F')], [('B', '49C'), ('C', 'T26'), ('D', 'xyz')], [('A', '24K'), ('C', 'B28'), ('D', '54C')]] new_lst = [] for tup_l in tup_list: seen = set() # 记录当前子列表已出现的首元素 new_tup_lst = [] for tup in tup_l: first_key = tup[0] if first_key not in seen: new_tup_lst.append(tup) seen.add(first_key) # 首元素加入已出现集合 new_lst.append(new_tup_lst) print(new_lst)
运行后输出和你期望的结果完全一致:
[[('A', '10'), ('B', '28D'), ('C', '14')], [('B', '49C'), ('C', 'T26'), ('D', 'xyz')], [('A', '24K'), ('C', 'B28'), ('D', '54C')]]
内容的提问来源于stack exchange,提问作者waji
相关产品推荐
相关产品推荐

