Python可变集合和不可变集合的构造方法大全


Posted in Python onDecember 06, 2021

 Python集合又是一种新的数据类型,集合有两种形式:可变集合(set())和不可变集合(frozenset())两种,这两种集合操作方法比较类似,但是在底层性质上有截然想法的区别。集合是一种无序的,不重复且不可随机访问的元素集合,在概念和运算上和数学中的集合类似,集合分为可变和不可变两种。

一、对比数据类型

下面是我们学习过的一些数据类型,下面的注释是对比这些数据类型的结果,供学习集合前的参考。

str1 = 'pythonpython'  # 不可变,有序:可以通过下标访问
list1 = [1, 2, 3, 2]  # 可变,有序:可以通过下标访问
tup1 = (1, 2, 3, 2)  # 不可变,有序:可以通过下标访问
dict1 = {'name': 'Tom', 'age': 18, 'love': 'python'}  # 可变,无序:但可以通过键访问

二、可变集合构造方法

1.直接构造

set2 = {'name', 19, 'python'}
print(set2, type(set2))

返回结果:

{19, 'python', 'name'} <class 'set'>

2.使用函数构造

str1 = 'pythonpython'
list1 = [1, 2, 3, 2]
tup1 = (1, 2, 3, 2)
dict1 = {'name': 'Tom', 'age': 18, 'love': 'python'}
set3 = set(str1)
print(set3, type(set3))
set4 = set(list1)
print(set4, type(set4))
set5 = set(tup1)
print(set5, type(set5))
set6 = set(dict1)
print(set6, type(set6))

返回结果:

{'t', 'n', 'p', 'o', 'h', 'y'} <class 'set'>
{1, 2, 3} <class 'set'>
{1, 2, 3} <class 'set'>
{'love', 'name', 'age'} <class 'set'>

3.使用推导式构造集合

set7 = set(i for i in range(1, 5))
print(set7, type(set7))

set8 = {i for i in list1}
print(set8, type(set8))

set8 = {i for i in tup1}
print(set8, type(set8))

返回结果:

{1, 2, 3, 4} <class 'set'>
{1, 2, 3} <class 'set'>
{1, 2, 3} <class 'set'>

三、不可变集合的构造方法

不可变集合构造(与可变集合类似,把set改为frozenset即可)。

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, 4}) <class 'frozenset'>

四、集合构造注意事项

1.集合不能想其他数据集一样使用特有的符号来构造,集合使用的语法符号是{},和字典是一样的,这时候直接使用{}来构造的,系统无法判断数据类型是字典还是集合,会默认为集合。

set9 = {}
print(type(set9))  # 默认为字典:<class 'dict'>

正确的方法只有使用构造函数来实现了。

set9 = set()
set99 = frozenset()

2.集合中不能包含字典和列表这样的可变类型元素

set10 = {'name', 19, [1, 2, 3, 2]}

列表不可哈希:TypeError: unhashable type: 'list'

到此这篇关于Python可变集合和不可变集合的构造方法大全的文章就介绍到这了,更多相关Python可变集合和不可变集合内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Apr 03 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
python实现列表的排序方法分享
Jul 01 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
Python连接Impala实现步骤解析
Aug 04 Python
python异步的ASGI与Fast Api实现
Jul 16 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 Python
Python实现视频中添加音频工具详解
Dec 06 #Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
python 管理系统实现mysql交互的示例代码
Python中super().__init__()测试以及理解
Dec 06 #Python
You might like
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
浅析PHP文件下载原理
2014/12/25 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
php连接mysql数据库
2017/03/21 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
python 域名分析工具实现代码
2009/07/15 Python
python使用pymysql实现操作mysql
2016/09/13 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
京东国际站:JOYBUY
2017/11/23 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
opencv实现图像平移效果
2021/03/24 Python
本科生求职简历的自我评价
2013/10/21 职场文书
高校学生干部的自我评价分享
2013/11/04 职场文书
编辑硕士自荐信范文
2013/11/27 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书