参考链接: Python Frozenset() 描述 frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。 语法 frozenset() 函数语法: class frozenset([iterable]) 参数 iterable -- 可迭代的对象,比如列表、字典、元组等等。 返回值 返回新的 frozenset 对象,如果不提供任何参数,默认会生成空集合。。 实例 以下实例展示了 frozenset() 的使用方法: >>>a = frozenset(range(10)) # 生成一个新的不可变集合 >>> a frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b = frozenset('runoob') >>> b frozenset(['b', 'r', 'u', 'o', 'n'])
()函数 frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。 frozenset()函数:返回新的 frozenset 对象,如果不提供任何参数,默认会生成空集合。 >>>a = frozenset(range(10)) # 生成一个新的不可变集合 >>> a frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b = frozenset('runoob') >>> b frozenset(['b', 'r', 'u', 'o', 'n']) # 创建不可变集合 >>> ---- 集合的创建 set()和 frozenset 'p', 's']) >>> t ^ s frozenset(['c', 'b', 'e', 'k']) >>> t - s frozenset(['k', 'b']) 如果左右两个操作数的类型相同,
一.frozenset集合语法 # 创建一个frozenset集合 a = frozenset(iterable) 其中 iterable 是序列或者可迭代对象,并返回frozenset集合 二.frozenset """ a = frozenset(["q123","python","frozenset"]) print(a) # 获取a的类型 print(type(a)) # 修改frozenset集合数据 ,程序报错:AttributeError: 'frozenset' object has no attribute 'add' # a.add("hello") 输出结果: frozenset({'frozenset ', 'python', 'q123'}) <class 'frozenset'> 在上面代码中,如果尝试修改frozenset集合的数据,即使用add()添加数据,程序报错:AttributeError : ‘frozenset’ object has no attribute ‘add’!
set有两种类型,set和frozenset。 set是可变的,有add(),remove()等方法。既然是可变的,所以它不存在哈希值。 frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法。 举例如下 seta=frozenset('a') dicta={seta:1,'b':2} #正确 setb=set('a') dictb={setb:1,'b':2} #错误 还有一点需要注意,不管是 set还是frozenset,Python都不支持创建一个整数的集合。
什么是frozenset? frozenset是Python中的不可变集合类型,它具有普通集合(set)的大部分特性,但一旦创建就不能修改。 frozenset vs set 的主要区别 可变性: set是可变的(mutable) frozenset是不可变的(immutable) 支持的操作: set支持添加、删除等修改操作 frozenset fs2 = frozenset((1, 2, 3)) print(fs2) # 输出: frozenset({1, 2, 3}) # 从字符串创建 fs3 = frozenset('hello') print(fs3) # 输出: frozenset({'h', 'e', 'l', 'o'}) # 创建空frozenset fs4 = frozenset() print(fs4) # 输出 支持的操作 # 创建两个frozenset fs1 = frozenset([1, 2, 3, 4]) fs2 = frozenset([3, 4, 5, 6]) # 计算交集 intersection
set(可变集合)与frozenset(不可变集合)的区别:set无序排序且不重复,是可变的,有add(),remove()等方法。既然是可变的,所以它不存在哈希值。 frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法。 一、集合的创建set()和 frozenset()工厂函数分别用来生成可变和不可变的集合。如果不提供任何参数,默认会生成空集合。 AttributeError: 'frozenset' object has no attribute 'add'三、成员关系 (in, not in) >>> 'k' in s False >>> ' (左操作数是 set,右操作数是 frozenset,或相反情况),则所产生的结果类型与左操作数的类型相同。
一、frozenset 本质解析 1.1 集合的双重性格 Python集合体系呈现清晰的层级关系: MutableSet├─ set└─ frozenset set:可变集合,支持增删改操作 frozenset 1.2 不可变性的三重保障 哈希稳定性:frozenset 实例的哈希值在其生命周期内保持不变 内存驻留:Python会缓存小整数和短字符串,frozenset 也享受此优化 线程安全:天然免疫多线程环境下的竞态条件 ([1, 2, 3]) # 集合转换s = {1, 2, 3}fs2 = frozenset(s) # 空集合empty_fs = frozenset() 2.2 集合运算全览 操作 示例 说明 并集 `fs1 fs2` 交集 fs1 & fs2 返回新frozenset 差集 fs1 - fs2 返回新frozenset 对称差集 fs1 ^ fs2 返回新frozenset 子集判断 fs1 <= (['theme', 'color']): 'dark_mode', frozenset(['language', 'region']): 'en_US'} # 安全查询key = frozenset
Python 的 frozenset 就是为了解决这个问题 - 它是不可变的集合类型。 关于frozenset的几个重要特点不可变性:一旦创建就不能修改,这使它可以作为字典的键# 这是允许的d = {frozenset([1, 2, 3]): "value"}# 这会报错s = set([ 1, 2, 3])d = {s: "value"} # TypeError: unhashable type: 'set'顺序无关性:# 这两个frozenset是相等的fs1 = frozenset __name__, args, tuple(sorted(kwargs.items())))关于frozenset的注意事项frozenset只能包含可哈希的元素。 例如,你不能创建包含列表或字典的frozenset。
({‘A’}), frozenset({‘B’}), frozenset({‘C’}), frozenset({‘E’})] 第 2 轮: [frozenset({‘C’, ‘B’}), frozenset ({‘E’, ‘B’}), frozenset({‘C’, ‘E’})] 第 3 轮: [frozenset({‘C’, ‘E’, ‘B’})] 支持度数据: frozenset({‘A’}): 0.5 frozenset({‘D’}): 0.25 frozenset({‘B’}): 0.75 frozenset({‘C’}): 0.5 frozenset({‘E’}): 0.75 frozenset ({‘C’, ‘B’}): 0.5 frozenset({‘E’, ‘B’}): 0.75 frozenset({‘C’, ‘E’}): 0.5 frozenset({‘A’, ‘B’}): 0.25 frozenset({‘C’, ‘A’}): 0.25 frozenset({‘A’, ‘E’}): 0.25 frozenset({‘C’, ‘E’, ‘B’}): 0.5
1.使用frozenset()函数构造 set3 = frozenset(str1) print(set3, type(set3)) set4 = frozenset(list1) print(set4 , type(set4)) set5 = frozenset(tup1) print(set5, type(set5)) set6 = frozenset(dict1) print(set6, type (set6)) 返回结果: frozenset({'p', 'n', 't', 'h', 'y', 'o'}) <class 'frozenset'> frozenset({1, 2, 3}) <class 'frozenset'> frozenset({1, 2, 3}) <class 'frozenset'> frozenset({'name', 'age', 'love'}) <class 'frozenset '> 2.推导式构造 set7 = frozenset(i for i in range(1, 5)) print(set7, type(set7)) 返回结果: frozenset({1, 2, 3,
Intro .NET 8 中引入了 FrozenCollection 使得只读 Collection 的操作性能更加好了,Stephen 在 .NET 8 的性能改进博客中也有提到,在只读的场景可以考虑使用 FrozenSet /FrozenDictionary 来提升性能 FrozenSet vs ImmutableHashSet FrozenSet/FrozenDictionary 实现大致原理差不多,所以我们以 FrozenSet 来分析 很多人可能会问不是已经有了 ImmutableHashSet/ImmutableDictionary 吗,为什么还要引入 FrozenSet/FrozenDictinary 呢? 这正是 FrozenDictionary<TKey, TValue> 和 FrozenSet所提供的。 的性能更加优秀,Dictionary 大家可以自己动动手尝试一下 除了前面说的 FrozenSet 没有 ImmutableHashSet 支持 Add/Remove 之外,FrozenSet/FrozenDictionary
第一次执行时 L 为 [[frozenset([1]), frozenset([3]), frozenset([2]), frozenset([5])]]。 L[k-2]=L[0]=[frozenset([1]), frozenset([3]), frozenset([2]), frozenset([5])],最后面 k += 1 while (len ([1, 3]), H = [frozenset([1]), frozenset([3])],那么现在需要求出 frozenset([1]) -> frozenset([3]) 的可信度和 frozenset ([2]), frozenset([3]), frozenset([5])] # 第一次递归调用时生成 [frozenset([2, 3]), frozenset([2, 5]), frozenset ([1]), frozenset([3]), frozenset([2]), frozenset([5])], [frozenset([1, 3]), frozenset([2, 5]), frozenset
set7 = {'name', 18, 'python2', 'abc'} set8 = frozenset({'name', 19, 'python3', 'abc'}) res = set7.intersection (set8) # {'abc', 'name'} <class 'set'> print(res, type(res)) res = set8.intersection(set7) # frozenset ({'abc', 'name'}) <class 'frozenset'> print(res, type(res)) 返回结果: {'abc', 'name'} <class 'set'> frozenset ({'abc', 'name'}) <class 'frozenset'> ## 2. python2', 'abc'} set6 = {'name', 19, 'python3', 'abc'} set7 = {'name', 18, 'python2', 'abc'} set8 = frozenset
通常用for循环. frozenset:冻结的集合 最大的特点:不可变. () s = frozenset('abcabc') s = frozenset([1,2,3]) s = frozenset((1,2,3)) s = frozenset({'name':'Andy' ,'age':10}) 集合的四大方法:并,交,差,对称差. set,frozenset是否可以混用? 总结: 如果两种数据类型混用,方法的主调者的类型决定了最终结果的类型. frozenset应用场景: 凡是使用到不可改变的数据的场景,都是可以使用frozenset的. set集合的元素:必须是可以哈希的 但是frozenset是不可变的数据.(可以哈希的),它是可以放到集合中. set和frozenset可以互相转换.
是为了后面可以将这些值作为字典的键 return list(map(frozenset, C1)) # frozenset一种不可变的集合,set可变集合 # 过滤掉不符合支持度的集合 # 是否是tid的《子集》 (这里使用子集的方式来判断两者的关系) if can not in ssCnt: # 统计该值在整个记录中满足子集的次数(以字典的形式记录,frozenset ({2, 3}), frozenset({3, 5})] -> [frozenset({2, 3, 5})] def aprioriGen(Lk, k): retList = [] lenLk 字典 [frozenset({1}), frozenset({2}), frozenset({3}), frozenset({4}), frozenset({5})] L1, supportData ([item]) for item in freqSet] # frozenset({2, 3}) 转换为 [frozenset({2}), frozenset({3})]
({1, 3}), frozenset({1, 2}), frozenset({1, 5}), frozenset({2, 3}), frozenset({3, 5}), frozenset( ({3}), frozenset({2}), frozenset({5})], [frozenset({2, 5})], []], {frozenset({1}): 0.5, frozenset( {3}): 0.75, frozenset({4}): 0.25, frozenset({2}): 0.75, frozenset({5}): 0.75, frozenset({1, 3 }): 0.5, frozenset({2, 3}): 0.5, frozenset({3, 5}): 0.5, frozenset({2, 5}): 0.75, frozenset({ 1, 2}): 0.25, frozenset({1, 5}): 0.25, frozenset({2, 3, 5}): 0.5}) 流程 首先从原始数据中经过扫描函数得到1-项集和相应的置信度
除了“可变集合”之外,还有一种集合是“不可变的”,创建这种集合要使用 frozenset() 函数。 >>> fs = frozenset([1,2,3]) # (8) >>> fs frozenset({1, 2, 3}) # (9) >>> type(fs) <class 'frozenset'> # (10) >>> dir(fs) ['__and__', '__class__', '__class_getitem__', '__contains_ ' object has no attribute 'add' 不可变集合和可变集合之间,可以通过内置函数 set() 和 frozenset() 进行相互转换。 >>> frozenset(s) # s 转换为不可变集合 frozenset({1, 2})
({1, 3}), frozenset({1, 2}), frozenset({1, 5}), frozenset({2, 3}), frozenset({3, 5}), frozenset( ({3}), frozenset({2}), frozenset({5})], [frozenset({2, 5})], []], {frozenset({1}): 0.5, frozenset( {3}): 0.75, frozenset({4}): 0.25, frozenset({2}): 0.75, frozenset({5}): 0.75, frozenset({1, 3 }): 0.5, frozenset({2, 3}): 0.5, frozenset({3, 5}): 0.5, frozenset({2, 5}): 0.75, frozenset({ 1, 2}): 0.25, frozenset({1, 5}): 0.25, frozenset({2, 3, 5}): 0.5}) 流程 首先从原始数据中经过扫描函数得到1-项集和相应的置信度
一种是写循环依次判断是否重复删重,另一种是用本公众号文章:Python中的集合提到的frozenset函数,一句语句解决该问题。 循环太过繁琐,而且速度较慢。 apply(frozenset, axis=1):把取出两列中的行当做变量依次传到frozenset函数中去。 frozenset:冻结集合,不可变,存在哈希值。 3 拆分代码并展示结果 拆分代码1: df[['merchant_r', 'merchant_l']].apply(frozenset, axis=1) 得到结果: ? 我们来看下用set替换frozenset是否可行。 而用frozenset函数配合其它函数代码特别简洁,故分享给更多有需要的朋友。本文有偏颇的地方欢迎指正。
Python默认内置了以下这些数据类型,分为以下几类: 文本类型:str 数值类型:int、float、complex 序列类型:list、tuple、range 映射类型:dict 集合类型:set、frozenset range x = {"name" : "John", "age" : 36} dict x = {"apple", "banana", "cherry"} set x = frozenset ({"apple", "banana", "cherry"}) frozenset x = True bool x = b"Hello" bytes x = bytearray( range x = dict(name="John", age=36) dict x = set(("apple", "banana", "cherry")) set x = frozenset (("apple", "banana", "cherry")) frozenset x = bool(5) bool x = bytes(5) bytes x = bytearray