Python:移除二维列表中全局重复的单个元素
解决方案:删除二维列表中全局重复的单个元素
纯Python实现
先通过collections.Counter统计所有元素的全局出现次数,再遍历每个子列表筛选出仅出现一次的元素:
from collections import Counter original_list = [ [1, 3, 4, 5, 77], [1, 5, 10, 3, 4], [1, 5, 100, 3, 4], [1, 3, 4, 5, 89], [1, 3, 5, 47, 48] ] # 摊平列表并统计元素频次 element_counts = Counter(num for sublist in original_list for num in sublist) # 过滤出每个子列表中仅出现一次的元素 new_list = [[num for num in sublist if element_counts[num] == 1] for sublist in original_list]
运行后得到的new_list即为目标结果:
[[77], [10], [100], [89], [47, 48]]
Pandas场景适配
如果要将结果作为新列存入DataFrame,结合apply方法即可快速实现:
import pandas as pd from collections import Counter # 构造示例DataFrame df = pd.DataFrame({ 'original_col': [ [1, 3, 4, 5, 77], [1, 5, 10, 3, 4], [1, 5, 100, 3, 4], [1, 3, 4, 5, 89], [1, 3, 5, 47, 48] ] }) # 统计全局元素频次 all_elements = [num for sublist in df['original_col'] for num in sublist] element_counts = Counter(all_elements) # 生成唯一元素新列 df['unique_elements'] = df['original_col'].apply(lambda x: [num for num in x if element_counts[num] == 1])
方案优势
- 仅需一次全局统计,时间复杂度为O(N)(N为所有元素的总数量),效率较高
- 代码简洁直观,利用列表推导式和Counter工具减少冗余代码
- 完美适配Pandas的DataFrame列处理场景
内容的提问来源于stack exchange,提问作者Mr.Slow
相关产品推荐
相关产品推荐

