如何识别两个向量中的不同元素并生成对应差异向量
提取两个元组列表的差异元素
针对两个长度可同可不同的元组列表,要提取指定差异元素可以按以下方式实现:
匹配示例结果:提取仅存在于t2、不存在于t1的元素
示例要求的结果是t2独有的元素,优先用集合做快速查找,兼顾运行效率和原列表顺序,代码如下:
t1 = [(1,2,3), (1,2,4),(2,5,1),(2,5,2)] t2 = [(1,2,3), (1,2,8),(2,5,1),(2,5,2)] set_t1 = set(t1) diff_t = [item for item in t2 if item not in set_t1]
运行后diff_t的结果就是[(1, 2, 8)],和示例要求完全一致。
扩展:提取两个列表所有互不共有的元素
如果需要把t1独有的、t2独有的元素全部找出来,可以用对称差逻辑:
set_t1 = set(t1) set_t2 = set(t2) # 不需要保留顺序的快速写法 all_diff = list(set_t1 ^ set_t2) # 需要保留两个列表原有顺序的写法 diff_in_t1 = [item for item in t1 if item not in set_t2] diff_in_t2 = [item for item in t2 if item not in set_t1] all_diff_ordered = diff_in_t1 + diff_in_t2
针对示例数据,all_diff_ordered的结果为[(1, 2, 4), (1, 2, 8)]。
注意事项
- 上述方法不要求两个列表长度一致,长度不同时也能正常计算
- 元组是可哈希类型,所以可以直接转集合实现O(1)时间复杂度的查找,比直接遍历原列表判断效率高很多
- 如果列表中存在重复的差异元素,列表推导写法会保留重复项,直接用集合运算会自动去重,可根据业务需求选择
- 如果列表中存储的是列表这类不可哈希的可变元素,只需要先把元素转成元组再存入集合即可
内容的提问来源于stack exchange,提问作者user9990604
相关产品推荐
相关产品推荐

