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发送邮件示例(支持中文邮件标题)
Feb 16 Python
python中List的sort方法指南
Sep 01 Python
简单谈谈python中的多进程
Nov 06 Python
Python发展史及网络爬虫
Jun 19 Python
pytest中文文档之编写断言
Sep 12 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
Python unittest框架操作实例解析
Apr 13 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
python 装饰器的实际作用有哪些
Sep 07 Python
Python中json.dumps()函数的使用解析
May 17 Python
Python实现视频中添加音频工具详解
Dec 06 #Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
python 管理系统实现mysql交互的示例代码
Python中super().__init__()测试以及理解
Dec 06 #Python
You might like
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP获取文件后缀名的三个函数
2012/10/15 PHP
测试php函数的方法
2013/11/13 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
删除节点的jquery代码
2014/01/13 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
js+html制作简单验证码
2017/02/16 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
Python实现购物车购物小程序
2018/04/18 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python如何实现复制目录到指定目录
2020/02/13 Python
python高级特性简介
2020/08/13 Python
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
工程师岗位职责
2013/11/08 职场文书
教师研修随笔感言
2014/01/23 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
面试通知短信
2015/04/20 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
大学生十八大感想
2015/08/11 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
用JS实现飞机大战小游戏
2021/06/09 Javascript
MySQL一些常用高级SQL语句
2021/07/03 MySQL
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers