Python学习之路-集合的介绍

简介: 今天学习一下集合

一、集合的特点

集合和列表非常相似,都是直接向对象中存储数据,不同点在于:

1.集合中只能存储不可变对象。例如字符串、数字、元组、none、TRUE、FALSE 都是可以存储的,但无法存储字典、列表。

2. 集合中存储的对象是无序的。这里的无序是相对于列表来说的。在列表中数据按照元素的插入顺序保存,存储的第n个数据会被放在索引为(n-1)的位置,而集合的无序指的是不按照元素的插入顺序保存,并不是真的完全无序。由于存储顺序与插入顺序无关,故无法根据索引查找数据。

3. 集合中不能出现重复的元素。即集合中的元素都是唯一的。

二、 创建集合

创建集合有两种方法:使用{ }来创建集合、使用函数set( )函数创建集合。

1、使用{}来创建集合

# 使用{}来创建集合s={1,2,3,4,5}
print(s,type(s))

image.png

这样似乎输入顺序和存储顺序一样,我们来试试另一组数据

s={10,6,3,1,7}
print(s,type(s))

得到的结果是:{1, 3, 6, 7, 10} <class 'set'>,这也说明了集合的一大特点:集合中存储的对象是无序的。

当输入重复元素时,集合只会保存一个元素。

s={10,6,3,4,5,3,3,6,6,7,7,1,7}
print(s,type(s))

得到的结果是:{1, 3, 4, 5, 6, 7, 10} <class 'set'>

集合中无法保存可变对象,如列表、字典等。例如:

s={[1,2,3,4],[5,6,7]}
print(s,type(s))

则会报错:TypeError: unhashable type: 'list'

2.使用set()来创建集合

s=set()  # 空集合

可以通过 set( ) 将序列和字典转换成集合。例子:

s=set([1,2,3,4,5,3,2,1,1])  # 空集合print(s,type(s))
s=set('hello')    #使用set( )将序列转换成集合print(s,type(s))

得到的结果是:

{1, 2, 3, 4, 5} <class 'set'> 和 {'h', 'e', 'l', 'o'} <class 'set'>

还可以使用 in 和 not in 来检查集合中的元素

s={'a','b',1,2,3,4,1}
print('a'ins)

得到结论是True

使用 len( ) 获取集合中元素的数量

s={'a','b',1,2,3,4,1}
print(len(s))

得到是6个元素

三、 向集合中添加元素

可以使用 add( )向集合中添加元素,add( ) 是 没有返回值的。

s={'a','b',1,2,3,4,1}
s.add(8)
print(s)

结果就是:{1, 2, 3, 4, 'b', 8, 'a'}

update 将一个集合的元素添加到当前集合中。添加序列、字典也是可以的,需要注意的是,添加字典只会使用键。

s={'a','b',1,2,3,4,1}
s2=set('hello')
s.update(s2)
print(s)

结果就是:{1, 2, 3, 4, 'h', 'e', 'a', 'o', 'l', 'b'}

四、 从集合中删除元素

pop( ) 随机删除并返回集合中的一个元素。调用方法为 s.pop( )。

咱们调用一下s.pop()

s={'a','b',1,2,3,4,1}
s2=set('hello')
s.update(s2)
s.pop()
print(s)

得到的结果是:{2, 3, 4, 'l', 'h', 'a', 'e', 'o', 'b'}

再调用一下,得到的结果是:{3, 4, 'o', 'h', 'b', 'e', 'l', 'a'}

如果想知道删除的是哪一个元素,可以使用 result。

s={'a','b',1,2,3,4,1}
s2=set('hello')
s.update(s2)
result=s.pop()
print(result)
print(s)

image.png说明是1被删了

remove( ) 删除集合中的指定元素。

s={'a','b',1,2,3,4,1}
s2=set('hello')
s.update(s2)    # 把s2添加到s集合中s.remove('e')
print(s)

得到的结果是:{1, 2, 3, 4, 'l', 'o', 'h', 'a', 'b'}

clear( )清空集合。

s={'a','b',1,2,3,4,1}
s2=set('hello')
s.update(s2)
s.clear()
print(s)

得到一个空集合:set()

相关文章
|
Web App开发 编解码 iOS开发
iOS字体像素与磅的对应关系
iOS字体像素与磅的对应关系
687 1
|
SQL Java 编译器
使用pypy来提升你的python项目性能
使用pypy来提升你的python项目性能
295 0
|
机器学习/深度学习 人工智能 算法
AI:人工智能之十一类机器学习算法(英文表示)详细分类之详细攻略(持续更新)
AI:人工智能之十一类机器学习算法(英文表示)详细分类之详细攻略(持续更新)
|
7天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
6天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
321 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
18天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1331 8
|
5天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
17天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1412 87