如何从嵌套列表筛选满足元素唯一性约束的目标子列表
解决你的嵌套列表筛选问题
首先咱们明确需求:要从sample里筛选出子列表,要求每个入选的子列表里的所有元素都没在之前选中的子列表的元素集合里,而且是按原列表顺序优先选择前面符合条件的。
你的代码问题分析
你当前的代码逻辑有点混乱:用i和j互相赋值的方式没法正确跟踪已选元素的集合,只是在两两对比子列表,没法覆盖所有已选元素的情况,自然得不到正确结果。比如当你选中多个子列表后,后续子列表需要和所有已选的元素对比,而不是只和某一个子列表对比。
正确的实现思路
我们需要维护一个已选元素的集合,用来记录所有已经被选中的子列表里的元素,然后按顺序遍历原列表,逐个检查子列表是否符合条件:
- 遍历每个子列表
- 检查该子列表的所有元素是否都不在已选集合中
- 如果符合条件,就把这个子列表加入结果列表,同时把它的元素全部添加到已选集合里
- 不符合的就跳过
代码实现
sample = [ ['Ban', 'App'], ['Ban', 'Ora'], ['Gra', 'App'], ['Gra', 'Ora'], ['Kiw','App'], ['Kiw', 'Ora'], ['Man', 'Blu'], ['Pin', 'App'] ] # 初始化已选元素集合和结果列表 selected_elements = set() final_output = [] for sublist in sample: # 检查当前子列表的所有元素是否都不在已选集合里 if all(element not in selected_elements for element in sublist): # 符合条件,加入结果列表 final_output.append(sublist) # 将子列表的元素添加到已选集合中 selected_elements.update(sublist) print(final_output) # 输出:[['Ban', 'App'], ['Gra', 'Ora'], ['Man', 'Blu']]
代码解释
selected_elements:用集合来存储已选元素,集合的查询效率是O(1),比列表更高效all(element not in selected_elements for element in sublist):用生成器表达式检查子列表的每个元素是否都不在已选集合中,只要有一个元素在集合里,就返回Falseselected_elements.update(sublist):把当前子列表的所有元素批量添加到集合中,方便后续子列表的检查
这样运行后,就能得到你需要的最终结果啦!
内容的提问来源于stack exchange,提问作者Sriya TR
相关产品推荐
相关产品推荐

