前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中的基础数据类型(Set集合)及其常用用法简析

Python中的基础数据类型(Set集合)及其常用用法简析

作者头像
Python进阶者
修改2020-05-19 17:44:09
1.4K0
修改2020-05-19 17:44:09
举报
文章被收录于专栏:Python爬虫与数据挖掘

夜阑卧听风吹雨,铁马冰河入梦来。

前言

前面的文章小编已经介绍了Number,String,List,Tuple,Dict五种基本的数据类型,今天小编来简单说一下最后一种数据类型,set集合。

特点

set集合由{}(花括号,大括号)包裹,注意生成空的集合不能用空的{},空的{}生成的是个空字典,列表和元组可以用这种方式生成空列表或元组。

  • 不同的元素组成(没有重复的元素)
  • 无序
  • 集合中的元素必须是不可变类型
代码语言:javascript
复制

# 定义一个集合
set1 = {1, 2, 3}
print(set1, type(set1))

# 字符串转换为set集合
set2 = set('hello')
print(set2)

# set集合有不同的元素组成,天然去重复
set3 = {1, 2, 3, 1, 2, 3}
print(set3)

# set集合元素必须为不可变类型
# set4 = {1, 2, 3, [1, 2, 3]}
# TypeError: unhashable type: 'list'

# 注意生成的是一个空字典
temp1 = {}
print(type(temp1))

# 正确的生成空集合的姿势
temp2 = set()
print(type(temp2))

# 这两种方式都可以生成空列表或元组
t1 = ()
t2 = tuple()
print(type(t1), type(t2))

set集合只能遍历取值,因为无序,所以无法索引取值

代码语言:javascript
复制

set1 = {1, 2, 3, 4, 5, 6}
for i in set1:
  print(i)
添加
代码语言:javascript
复制
set1 = {1, 2, 3}
set1.add(4)
print(set1)

更新

代码语言:javascript
复制
# 和添加一样
set1 = {1, 2, 3, 4, 5, 6, 'aaa', 'sss'}
# 添加一个值
set1.update('a')
# 添加多个值
set1.update(['s','ss'])
print(set1)

删除

代码语言:javascript
复制

set1 = {1, 2, 3, 4, 5, 6, 'aaa', 'sss'}
temp = set1.pop() # 随机删除并返回删除的元素
print(set1, temp)

set2 = {1, 2, 3, 4, 5, 6, 'aaa', 'sss'}
# 指定删除,删除不存在的元素抛出异常
set2.remove('aaa')
# set2.remove('a') # KeyError: 'a'
set2.discard('sss')
# 删除不存在的元素不抛出异常
set2.discard('s')
print(set1)

# 清空集合
set2.clear()
print(set2)

定义一个不可变的集合

代码语言:javascript
复制

set1 = frozenset('hello')
print(set1)
# 添加抛出异常
# set1.add('a') # 'frozenset' object has no attribute 'add'

数学运算

代码语言:javascript
复制
set1 = {'aa', 'bb', 'cc', 'zz'}
set2 = {'aa', 'bb', 'dd', 'ee'}
# 交集,方法和符号两种一样
print(set1.intersection(set2))
print(set1 & set2)

# 并集
print(set1.union(set2))
print(set1 | set2)

# 差集
print(set1.difference(set2))
print(set1 - set2)

# 交叉补集
print(set1.symmetric_difference(set2))
print(set1 ^ set2)

# 是否有交集,如果没有返回 True,否则返回 False
print(set1.isdisjoint(set2))

#某个集合是否是某个集合的子集,返回布尔值
print(set1.issubset(set2))

#某个集合是否是某个集合的父集,返回布尔值
print(set1.issuperset(set2))

总结

Python中set(集合),其实也是存储数据的一个容器,列表,元组,字典这三种数据类型也是存储数据的,其中列表和元组几乎一样,唯一区别就是元组无法更改(准确来说是元组的第一层索引无法更改),举个栗子:

代码语言:javascript
复制

tu = (1, 2, 3, 4, [1, 2, 3, 4])
# 想把整个列表换掉就会抛出异常
# tu[4] = 'a' #TypeError: 'tuple' object does not support item assignment
# 改变元组内列表的值,整个元组的数据发生了一点点变化
# 其实原理很简单,就是整个列表的指针从没改变,
tu[4][0] = 'a'
print(tu)

嘻嘻,可能有人已经发现了,第一层的索引值无法改变,但是里面是一个可变的数据类型,就已经可以改变了。

元组适合存储数据不会发生变化的少量数据。

列表适合存储数据容易发生变化的少量数据。

为啥是少量数据呢?举个栗子,就好像我们要在字典中的所有字中找到某个字一样(假如没有根据拼音排序过的那种),那么我们一般就需要从第一个字开始寻找,一直到寻找到这个字。

相信大家都知道,上述的那种做法效率实在是太慢了,所以字典就加上了各种排序规则,查字典相信我们大家肯定都会。Python中的字典也是这样子的机制,存入的key按照某种规律已经排好序了,寻找键也是很快的,需要的时候直接通过键定位到相应的值,所以键只能是唯一的。

字典适合存存储大量的需要查询的数据。

集合适合存储值只能唯一的数据(去重)。

超大号重点

一个好的数据结构使程序事半功倍

------------------- End -------------------

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 特点
  • 超大号重点
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档