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分割和拼接字符串
Nov 01 Python
Python lxml模块安装教程
Jun 02 Python
Python实现删除文件但保留指定文件
Jun 21 Python
python异常和文件处理机制详解
Jul 19 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
Python线程协作threading.Condition实现过程解析
Mar 12 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 网上商城促销设计实例代码
2012/02/17 PHP
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python线性方程组求解运算示例
2018/01/17 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
Python猜数字算法题详解
2020/03/01 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
小班秋游活动方案
2014/02/22 职场文书
初中生期末评语大全
2014/04/24 职场文书
防汛工作情况汇报
2014/10/28 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
一文搞懂Redis中String数据类型
2022/04/03 Redis
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis