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去掉行尾的换行符方法
Jan 04 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 Python
django项目中新增app的2种实现方法
Apr 01 Python
jupyter 导入csv文件方式
Apr 21 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
python批量修改文件名的示例
Sep 27 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
在python中读取和写入CSV文件详情
Jun 28 Python
Python实现视频中添加音频工具详解
Dec 06 #Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
python 管理系统实现mysql交互的示例代码
Python中super().__init__()测试以及理解
Dec 06 #Python
You might like
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
(function($){...})(jQuery)的意思
2010/07/22 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
python验证码识别的示例代码
2017/09/21 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
实例讲解Python3中abs()函数
2019/02/19 Python
Python3最长回文子串算法示例
2019/03/04 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
客服部工作职责范本
2014/02/14 职场文书
青春无悔演讲稿
2014/05/08 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
安全生产先进个人总结
2015/02/15 职场文书
2015年大学生实习评语
2015/03/25 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL