
如果您需要对Python中的数据进行去重处理或执行数学意义上的集合运算,set类型提供了简洁高效的内置支持。以下是set在去重与集合运算中的常用操作方式:
一、使用set实现列表去重并保持原始顺序
直接调用set()会丢失原有顺序,但可通过结合dict.fromkeys()或循环遍历实现去重且保序。该方法利用字典键的唯一性与插入顺序保留特性(Python 3.7+)。
1、定义原始列表:numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
2、使用dict.fromkeys()去重保序:unique_list = list(dict.fromkeys(numbers))
立即学习“Python免费学习笔记(深入)”;
3、打印结果:print(unique_list) → 输出[3, 1, 4, 5, 9, 2, 6]
二、使用set构造器直接去重(不保证顺序)
此方式最简捷,适用于仅需唯一元素、无需关注顺序的场景。set内部基于哈希表实现,平均时间复杂度为O(1)。
1、创建含重复元素的列表:data = ['a', 'b', 'a', 'c', 'b']
2、转换为set:s = set(data)
3、转回列表(顺序不确定):result = list(s)
4、输出示例值可能为:['c', 'a', 'b'] 或其他排列
三、集合交集运算(& 或 intersection())
交集返回同时存在于两个集合中的元素,适用于查找共通项,如共同好友、公共标签等。
1、定义集合A:set_a = {1, 2, 3, 4}
2、定义集合B:set_b = {3, 4, 5, 6}
3、使用符号运算求交集:common = set_a & set_b
4、或调用方法:common = set_a.intersection(set_b)
5、结果为:{3, 4}
四、集合并集运算(| 或 union())
并集合并两个集合的所有唯一元素,自动剔除重复项,常用于数据汇总或范围扩展。
1、定义集合X:set_x = {'apple', 'banana'}
2、定义集合Y:set_y = {'banana', 'cherry', 'date'}
3、使用符号运算求并集:all_fruits = set_x | set_y
4、或调用方法:all_fruits = set_x.union(set_y)
5、结果为:{'apple', 'banana', 'cherry', 'date'}
五、集合差集运算(- 或 difference())
差集返回属于左集合但不属于右集合的元素,可用于识别独有项,例如用户A有而用户B没有的权限。
1、定义集合M:set_m = {10, 20, 30, 40}
2、定义集合N:set_n = {30, 40, 50, 60}
3、使用符号运算求M对N的差集:only_in_m = set_m - set_n
4、或调用方法:only_in_m = set_m.difference(set_n)
5、结果为:{10, 20}
六、集合对称差集运算(^ 或 symmetric_difference())
对称差集返回仅存在于其中一个集合、不同时存在于两个集合的元素,等价于 (A-B) ∪ (B-A)。
1、定义集合P:set_p = {1, 2, 3}
2、定义集合Q:set_q = {2, 3, 4}
3、使用符号运算求对称差集:diff = set_p ^ set_q
4、或调用方法:diff = set_p.symmetric_difference(set_q)
5、结果为:{1, 4}
七、判断子集与超集关系(issubset() / issuperset())
子集判定用于验证一个集合是否完全包含于另一个集合中,常见于权限校验或条件过滤。
1、定义集合S:subset = {5, 6}
2、定义集合L:larger = {4, 5, 6, 7, 8}
3、检查subset是否为larger的子集:is_sub = subset.issubset(larger)
4、检查larger是否为subset的超集:is_super = larger.issuperset(subset)
5、两者均返回:True
八、添加与移除元素(add() / remove() / discard())
动态修改集合内容时,add()添加单个元素;remove()在元素不存在时报错;discard()则静默忽略不存在的情况。
1、初始化空集合:my_set = set()
2、添加元素:my_set.add('hello')
3、安全移除元素(无异常):my_set.discard('world')
4、强制移除(若不存在则触发KeyError):my_set.remove('hello')
5、最终集合状态为:set()










