如何在Python中获取两个集合的非交集元素(列表形式)?
解决方法
要找出不同时出现在两个集合中的元素,你需要的是对称差集——也就是只在其中一个集合里存在、不会同时出现在两个集合里的元素。你之前用not(set(a) & set(b))得到False是因为:set(a) & set(b)得到的是交集集合,只要这个集合不为空,not就会返回布尔值False,这显然不是你要的列表结果。
下面是几种可行的实现方式:
方法一:使用集合的
^运算符(对称差集运算符)a = ["中国", "美国", "英国", "法国"] b = ["美国", "法国", "德国", "日本"] # 计算对称差集并转为列表 diff_elements = list(set(a) ^ set(b)) print(diff_elements) # 输出类似 ['英国', '中国', '德国', '日本']方法二:调用集合的
symmetric_difference()方法diff_elements = list(set(a).symmetric_difference(set(b)))方法三:用并集减去交集(逻辑上和对称差集等价)
diff_elements = list((set(a) | set(b)) - (set(a) & set(b)))
以上三种方法都能得到你需要的列表形式结果,元素顺序可能因为集合的无序性有所不同,如果需要保留原列表的顺序,可以额外处理,但一般情况下直接转列表就能满足需求。
内容的提问来源于stack exchange,提问作者Taf Chan
相关产品推荐
相关产品推荐

