如何从Python元组列表中提取特定无重复元素生成新列表?
解决方法:从元组列表中提取唯一的(姓名,目标值)组合
嘿,这个需求很常见,给你几个简洁的实现方案,根据你的具体需求选就行:
方法1:用集合快速去重(最简单,不保证顺序)
如果不需要保留原列表中元素首次出现的顺序,直接用集合推导式就能搞定,集合会自动剔除重复的元组:
original_list = [(1, 2, 'Adam', 'M', '2', '12'), (1, 2, 'Ewa', 'W', '2.0 (E)', '44'), (1, 2, 'Ewa', 'W', '2.0 (E)', '44'), (2, 3, 'Adam', 'M', '2', '12'), (2, 3, 'Ewa', 'W', '2.0 (E)', '44')] result = list({(item[2], item[5]) for item in original_list}) print(result) # 输出类似 [('Adam', '12'), ('Ewa', '44')],顺序可能因Python版本略有不同
逻辑很简单:遍历原列表,从每个元组里提取第3个(索引2)和第6个(索引5)元素组成新元组,集合会自动过滤掉重复的组合,最后转成列表即可。
方法2:保持首次出现的顺序(Python 3.7+)
如果你需要保留原列表中每个组合第一次出现的顺序,可以用dict.fromkeys(),因为Python 3.7及以上的字典会维护插入顺序:
original_list = [(1, 2, 'Adam', 'M', '2', '12'), (1, 2, 'Ewa', 'W', '2.0 (E)', '44'), (1, 2, 'Ewa', 'W', '2.0 (E)', '44'), (2, 3, 'Adam', 'M', '2', '12'), (2, 3, 'Ewa', 'W', '2.0 (E)', '44')] result = list(dict.fromkeys((item[2], item[5]) for item in original_list)) print(result) # 输出 [('Adam', '12'), ('Ewa', '44')],顺序和原列表首次出现一致
dict.fromkeys()会把每个(姓名,目标值)元组作为字典的键(键是唯一的),自动跳过重复的键,最后转成列表就得到了有序的结果。
方法3:手动遍历去重(适合新手理解)
如果想更清晰地控制流程,用普通循环加集合记录已出现的组合也很直观:
original_list = [(1, 2, 'Adam', 'M', '2', '12'), (1, 2, 'Ewa', 'W', '2.0 (E)', '44'), (1, 2, 'Ewa', 'W', '2.0 (E)', '44'), (2, 3, 'Adam', 'M', '2', '12'), (2, 3, 'Ewa', 'W', '2.0 (E)', '44')] seen = set() result = [] for item in original_list: current_pair = (item[2], item[5]) if current_pair not in seen: seen.add(current_pair) result.append(current_pair) print(result) # 输出 [('Adam', '12'), ('Ewa', '44')],顺序和原列表首次出现一致
这个方法用seen集合来跟踪已经添加过的组合,遍历原列表时只添加未出现过的组合,既保证去重又能控制顺序。
内容的提问来源于stack exchange,提问作者user9373369
相关产品推荐
相关产品推荐

