热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享Python中使用Frozenset对象的案例详解

这篇文章将介绍在python中使用"frozenset"函数的指南,该函数返回一个新的frozenset类型的python对象。这些对象类似于python中的s

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

关于frozensets

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

创建一个新的frozenset对象

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

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

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

frozenset({1, 2, 3, 4})  

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

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

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

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方法时,却抛出了一个错误。运行上述代码示例后,你应该得到以下输出。

{2, 3, 4}  traceback (most recent call last):    file "main.py", line 9, in       fset.remove(1)  attributeerror: 'frozenset' object has no attribute 'remove'

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

与 frozensets 一起使用的方法

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

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的元素。运行上述代码样本后,你应该得到以下输出。

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类型对象。

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是可散列的,它们可以在集合内使用,而集合不能插入到另一个集合中。看一下下面的代码。

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

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

{frozenset({4, 5}), 1, 2}  traceback (most recent call last):    file "main.py", line 27, in       s = {1, 2, {4, 5}}  typeerror: unhashable type: 'set'

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

总结

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

到此这篇关于如何在python中使用frozenset对象的文章就介绍到这了,更多相关python frozenset对象内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!

需要了解更多python教程分享Python中使用Frozenset对象的案例详解,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python中程序员的面试题有哪些
    小编给大家分享一下Python中程序员的面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 用户视图(查看运行状态或其他参数)系统视图(配置设备的系统参数)system-viewEntersystemview,returnuservi ... [详细]
  • 浅谈Python3中打开文件的方式(With open)
    浅谈Python3中打开文件的方式(With open)-目录0.背景知识1.常规方式:读取文件-----open()2.推荐方式:读取文件-----WithOpen1).读取方式 ... [详细]
  • Python3怎么获取文件属性
    这篇文章给大家分享的是有关Python3怎么获取文件属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。os.stat(path ... [详细]
  • Python Flask学习之安装SQL,python3,Pycharm(网上下载安装即可)
    1,下载时更改pypi源。可以额外安装虚拟化环境:pipinstall-ihttp:pypi.douban.comsimple--trusted-hos ... [详细]
author-avatar
mobiledu2502918317
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有