脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python中使用Frozenset对象的案例详解

Python中使用Frozenset对象的案例详解

2022-08-24 18:13吴欣 Python

Frozensets提供了一种创建不可变的集合的方法,它们只接受唯一的元素,并且是可散列类型的对象,所以它们可以在其他只接受可散列对象作为子对象的 Python 对象中使用,这篇文章主要介绍了如何在Python中使用Frozenset对象,需要的朋

这篇文章将介绍在Python中使用 "frozenset "函数的指南,该函数返回一个新的frozenset类型的Python对象。这些对象类似于Python中的set对象,但有一些关键的区别。本文的所有代码样本都是在Ubuntu 21.04上用Python 3.9.5测试的。

关于Frozensets

frozenset 函数接收一个可迭代类型的 Python 对象的参数,并返回一个新的 frozenset 类型的 Python 对象。一个 frozenset 类型的对象是一个可散列的、不可改变的 Python 对象,其元素在整个生命周期内是冻结的或不可改变的。与元素可以随时改变的集合类型的Python对象相反,frozenset中的所有项目都保持不变。frozensets 的用法可以通过例子得到最好的理解。下面将解释其中的一些。

创建一个新的Frozenset对象

要获得一个新的 frozenset类型的对象,只需提供任何可迭代的类型作为frozenset函数的可选参数。下面是一个代码示例。

?
1
2
3
4
l = [1, 2, 3, 4]
fset = frozenset(l)
print (fset)
print (type(fset))

代码中的第一条语句定义了一个新的列表,它被简单地称为 "l"。接下来,通过调用frozenset函数并提供列表作为参数,创建了一个新的frozenset对象。运行上述代码示例后,你应该得到以下输出。

?
1
2
frozenset({1, 2, 3, 4})
<class 'frozenset'>

正如你在输出中看到的,fset是一个frozenset类型的对象,它使用了Python中set也使用的大括号语法。Frozenset只包含唯一的项目,因为不允许有重复的项目,这一点与Python的set类型对象非常相似。每个frozenset类型的对象都是一个 Python 集合,但反之亦然,因为集合项可以通过调用一些方法来改变。注意,你可以通过调用没有任何参数的frozenset函数来创建一个空的frozenset

一旦创建了Frozenset,你就不能修改它了

如前所述,一个frozenset类型的对象有一些项目,在其生命周期内不会改变。虽然你可以用 frozenset 类型对象使用 Python 集合的方法,但是如果你试图使用改变原始frozenset对象本身的方法,就会出现错误。下面是一个例子。

?
1
2
3
4
5
6
l = [1, 2, 3, 4]
new_set = set(l)
new_set.remove(1)
print (new_set)
fset = frozenset(l)
fset.remove(1)

在上面的代码示例中,有两条语句调用了集合类型对象的 "删除"方法。虽然一个项目被成功地从 "new_set"中删除,但当对 "fset"调用remove方法时,却抛出了一个错误。运行上述代码示例后,你应该得到以下输出。

?
1
2
3
4
5
{2, 3, 4}
Traceback (most recent call last):
  File "main.py", line 9, in <module>
    fset.remove(1)
AttributeError: 'frozenset' object has no attribute 'remove'

其他类似的方法,如 "add"、"pop"、"clear"、"discard "等,对forzensets不起作用。

与 Frozensets 一起使用的方法

所有不修改集合项的 Python 集合方法都对frozenset类型的对象有效。所以你可以比较两个frozenset的等价或不等价,迭代/循环它们,获得两个frozenset之间的共同或唯一元素,等等。下面是一个例子,显示了一些与frozensets有关的方法。

?
1
2
3
4
5
6
7
fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
print (fset1.intersection(fset2))
print (fset1.union(fset2))
print (fset1.difference(fset2))
print (len(fset1))
print (len(fset2))

这些代码是不言自明的。一些不改变原始frozensets值的方法已经被调用。这些方法主要用于比较两个不同frozensets的元素。运行上述代码样本后,你应该得到以下输出。

?
1
2
3
4
5
frozenset({3, 4})
frozenset({1, 2, 3, 4, 5, 6})
frozenset({1, 2})
4
4

其他一些处理冻结集的方法有:"issubset"、"issuperset"、"symmetric_difference"、"copy",等等。像">"、"<"、">="和"<="这样的等价运算符也适用于frozenset类型对象。

Frozenset可以被转换为其他可迭代类型

你可以通过调用它们的主构造函数将frozenset类型的对象转换为其他可迭代的对象。下面的代码示例显示了将frozenset类型对象转换为list、tuple和set类型对象。

?
1
2
3
4
fset = frozenset([1, 2, 3, 4])
print (list(fset))
print (tuple(fset))
print (set(fset))

运行上述代码样本后,你应该得到以下输出。

[1, 2, 3, 4]

(1, 2, 3, 4)

{1, 2, 3, 4}

Frozenset使用案例

由于frozenset对象只不过是不可改变的/不可变的集合类型的 Python 对象,你可能会想知道它们的效用,因为集合总是可以被用来代替它们。frozenset最明显的用例是用于声明具有独特元素的集合类型对象,而没有在代码中意外改变它们的风险。Frozenset类型的对象可以被用作字典的键,而集合则不能用于同样的目的。由于frozenset是可散列的,它们可以在集合内使用,而集合不能插入到另一个集合中。看一下下面的代码。

?
1
2
3
4
fset = frozenset({4, 5})
s = {1, 2, fset}
print (s)
s = {1, 2, {4, 5}}

在第二条语句中,一个frozenset已经在创建过程中被添加到一个集合中。在最后一条语句中,一个集合类型的对象被用在另一个集合里面。运行上述代码示例后,你应该得到以下输出。

?
1
2
3
4
5
{frozenset({4, 5}), 1, 2}
Traceback (most recent call last):
  File "main.py", line 27, in <module>
    s = {1, 2, {4, 5}}
TypeError: unhashable type: 'set'

正如你在输出中看到的,forzensets可以被添加到其他集合中。另一方面,将一个集合添加到另一个集合中会产生一个错误,因为集合只接受可散列类型的项目。

总结

Frozensets提供了一种创建不可变的集合的方法。它们只接受唯一的元素,并且是可散列类型的对象,所以它们可以在其他只接受可散列对象作为子对象的 Python 对象中使用。

到此这篇关于如何在Python中使用Frozenset对象的文章就介绍到这了,更多相关Python Frozenset对象内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7125728094404476935

延伸 · 阅读

精彩推荐
  • PythonPython实现重建二叉树的三种方法详解

    Python实现重建二叉树的三种方法详解

    这篇文章主要介绍了Python实现重建二叉树的三种方法,结合实例形式分析了Python重建二叉树的实现方法、操作技巧与注意事项,需要的朋友可以参考下...

    fly_hawk10732021-03-08
  • PythonPython lxml解析HTML并用xpath获取元素的方法

    Python lxml解析HTML并用xpath获取元素的方法

    今天小编就为大家分享一篇Python lxml解析HTML并用xpath获取元素的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    lilongsy12252021-05-10
  • Pythontensorflow图像裁剪进行数据增强操作

    tensorflow图像裁剪进行数据增强操作

    这篇文章主要介绍了tensorflow图像裁剪进行数据增强操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    yeler0828932020-07-01
  • Pythonpython爬取梨视频生活板块最热视频

    python爬取梨视频生活板块最热视频

    这篇文章主要介绍了python爬取梨视频生活板块最热视频,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    General_zy7102021-09-23
  • Pythonpython中使用iterrows()对dataframe进行遍历的实例

    python中使用iterrows()对dataframe进行遍历的实例

    今天小编就为大家分享一篇python中使用iterrows()对dataframe进行遍历的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    邵露露15912021-03-02
  • PythonPython绘制地理图表可视化神器pyecharts

    Python绘制地理图表可视化神器pyecharts

    这篇文章主要介绍了Python绘制地理图表可视化神器pyecharts,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下...

    王小王_1236502022-07-04
  • PythonPython+Appium实现自动抢微信红包

    Python+Appium实现自动抢微信红包

    不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情。于是我用python解...

    HUNY6512021-11-10
  • PythonPython全栈之面向对象基础

    Python全栈之面向对象基础

    这篇文章主要为大家介绍了Python面向对象基础,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助...

    熬夜泡枸杞5132022-03-10