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 相关文章推荐
Eclipse + Python 的安装与配置流程
Mar 05 Python
跟老齐学Python之做一个小游戏
Sep 28 Python
Python异常学习笔记
Feb 03 Python
python对excel文档去重及求和的实例
Apr 18 Python
python实现决策树ID3算法的示例代码
May 30 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
详解pandas的外部数据导入与常用方法
May 01 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 Python
Python实现视频中添加音频工具详解
Dec 06 #Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
python 管理系统实现mysql交互的示例代码
Python中super().__init__()测试以及理解
Dec 06 #Python
You might like
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python浅复制中对象生存周期实例分析
2018/04/02 Python
详解python tkinter模块安装过程
2020/01/06 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
django使用JWT保存用户登录信息
2020/04/22 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
在Pycharm中安装Pandas库方法(简单易懂)
2021/02/20 Python
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
最热门的自我评价
2013/12/30 职场文书
爱护草坪标语
2014/06/24 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
创业计划书之美容店
2019/09/16 职场文书
总结python多进程multiprocessing的相关知识
2021/06/29 Python
Redis RDB技术底层原理详解
2021/09/04 Redis