Python集合怎么去重_Set数据结构特性与交并差集合运算
set()去重不生效因只支持不可变类型含列表、字典等会报TypeError需转为可哈希形式如tuple(sorted(d.items()))自定义类须实现__hash__和__eq__set无序保序用dict.fromkeys()符号运算要求两边为set方法支持任意可迭代对象。Python里用set()去重为什么有时不生效因为set()只支持不可变类型对含列表、字典等可变对象的嵌套结构直接报错TypeError: unhashable type: list。这不是bug是集合底层哈希机制决定的。纯数字、字符串、元组且内部全不可变可直接set()去重含list或dict的元素必须先转成可哈希形式比如tuple(sorted(d.items()))自定义类需实现__hash__和__eq__才可进set去重后顺序不保留——set无序如需保序得配合dict.fromkeys()set交集、并集|、差集-的实际行为差异符号运算符和方法调用如.intersection()看似等价但参数类型和空值处理不同符号操作要求两边都是set而方法支持任意可迭代对象且能链式调用。{1,2} [2,3] → 报错{1,2}.intersection([2,3]) → 正常返回{2}{1,2} - {2,3} - {3}从左到右计算等价于({1,2} - {2,3}) - {3}结果是{1}.difference()接受多个参数s.difference(a, b)等价于s - a - b空set参与运算不会报错但set().intersection([])返回空set不是None用set做成员判断比list快多少平均时间复杂度从O(n)降到O(1)但实际提升取决于数据规模和哈希冲突。小列表in查可能更快因为set构造本身有开销。重复查询场景如过滤大量数据一定先转set比如blacklist_set set(blacklist)再循环判断单次判断小数据量别为“理论上快”强行转set反而多一次遍历frozenset适合当字典键或传入函数作只读集合避免意外修改注意内存set比list内存占用高约3–5倍大数据量要权衡字符串转set去重后为什么顺序乱了set(hello)得到{h, e, l, o} 是因为set不保证插入顺序——这是语言规范不是版本问题。3.7的dict有序但set没跟上。 Adobe Image Background Remover Adobe推出的图片背景移除工具
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2491209.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!