Python数据结构——集合(详细版)

集合是一种可迭代的、无序的、不能包含重复元素的数据结构。与序列相比,序列中的元素是有序的,可以重复出现,而集合中的元素是无序且不能有重复元素。

序列强调的是有序,集合强调的是不重复。当不考虑顺序,且没有重复元素时,序列和集合可以互相转换。

集合又可分为可变集合(set)和不可变集合(frozenset)

可变集合

 可变集合可以插入和删除元素

创建可变集合

方法一:使用 {} 将元素括起来,元素之间用逗号分隔

方法二:使用set()函数

输入下面代码

a = {'张三','李四','王五'}              #创建一个可变集合方法一
print(a)
print(type(a))
b = {'张三','李四','王五','王五'}       #当有重复元素时,创建会自动剔除重复元素
print(len(b))
print(b)
c = set((1,2,3,4))                    #创建一个可变集合方法二
print(c)
d = {}
print(type(d))                        #若创建一个空的 {} ,其类型为字典
e = set()
print(type(e))                        #要创建一个空集合用set()

代码运行结果

{'王五', '张三', '李四'}
<class 'set'>
3
{'王五', '张三', '李四'}
{1, 2, 3, 4}
<class 'dict'>
<class 'set'>

修改可变集合

 修改可变集合的常用方法如下表格

函数描述
add(element)添加元素,如果元素已经存在,则不能添加,不会抛出错误
remove(element)删除元素,如果元素不存在,则抛出错误
discard(element)删除元素,如果元素不存在,不会抛出错误
pop()删除返回集合中任意一个元素,返回值是删除的元素
clear()清除集合中所有元素

输入下面代码

a = {'张三','李四','王五'}              #创建一个可变集合
a.add('赵六')                         #使用add函数添加元素,由于集合是无序的,因此添加的元素# 并不会按照“末尾添加”
print(a)
a.remove('赵六')                      #使用remove删除元素
print(a)
a.discard('王五')                     #使用discard删除元素
print(a)
b = a.pop()                          #使用pop删除元素并获取被删除的元素赋给变量b并打印出来
print(b)
print(a)
c = set((1,2,3,4,5))
print(c)
c.clear()                             #使用clear清除所有元素
print(len(c))

 代码运行结果

{'张三', '李四', '赵六', '王五'}
{'张三', '李四', '王五'}
{'张三', '李四'}
张三
{'李四'}
{1, 2, 3, 4, 5}
0

遍历集合

集合是无序的,虽然没有索引,但是可以通过遍历集合,访问集合每个元素,一般使用 for循环

输入下面代码

a = {'张三','李四','王五'}              #创建一个可变集合
for i in a:print(i)
print("------------")
for i ,item in enumerate(a):print('{0}---{1}'.format(i,item))

代码运行结果

张三
王五
李四
------------
0---张三
1---王五
2---李四

注意:虽然第二个for循环使用了enumerate()函数,但是此处的变量 i 不是索引,而是遍历集合的次数

 不可变集合

创建不可变集合用frozenset()函数,因为集合也是可迭代对象,因此也可以用元组作为frozenset()的参数

输入下面代码

a = frozenset({1,2,3,4,5})
print(a)
print(type(a))
b = (1,2,3,4,5,6)
c = frozenset(b)
print(c)
print(type(c))

代码运行结果

frozenset({1, 2, 3, 4, 5})
<class 'frozenset'>
frozenset({1, 2, 3, 4, 5, 6})
<class 'frozenset'>

集合推导式

与列表推导式类似,只是输出结果过滤掉重复元素的集合

输入下面代码

a = {x*10 for x in range(10)}
print(a)
print(type(a))
b = [2,3,2,5,4,5]
c = [x ** 2 for x in b]         #使用列表推导式,可以看到所有元素
print(c)
d = {x **2 for x in b}          #使用集合推导式,可以看到结果集合中过滤掉了重复元素
print(d)

代码运行结果

{0, 70, 40, 10, 80, 50, 20, 90, 60, 30}
<class 'set'>
[4, 9, 4, 25, 16, 25]
{16, 9, 4, 25}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中的数据分析(juypter)

加载数据后的套路 df.head() df.info() df.describe() 选择部分数据 df[[要选中的列名的列表]] df.loc[,] df.iloc[,] df.query() 增加 df[新列名] [新值] df.insert(loc , column,value ) 删除 df.drop() df.drop_duplicates() axis 0 可以改成1 inplace 修改数据 df…

解决el-table表格拖拽后,只改变了数据,表头没变的问题

先看看是不是你想要解决的问题 拖拽后表头不变的bug修复 这个问题一般是使用v-for对column的数据进行循环的时候&#xff0c;key值绑定的是个index导致的&#xff0c;请看我上篇文章&#xff1a;eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽)&#xff1a;-…

FastAPI操作关系型数据库

FastAPI可以和任何数据库和任意样式的库配合使用&#xff0c;这里看一下使用SQLAlchemy的示例。下面的示例很容易的调整为PostgreSQL&#xff0c;MySQL&#xff0c;SQLite&#xff0c;Oracle等。当前示例中我们使用SQLite ORM对象关系映射 FastAPI可以与任何数据库在任何样式…

eFuse电子保险丝,需要了解的技术干货来啦

热保险丝作为一种基本的电路保护器件&#xff0c;已经成功使用了150多年。热保险丝有效可靠、易用&#xff0c;具有各种不同的数值和版本&#xff0c;能够满足不同的设计目标。然而&#xff0c;对于寻求以极快的速度切断电流的设计人员来说&#xff0c;热保险丝不可避免的缺点就…

联邦学习论文阅读:2018 Federated learning with non-IID data

介绍 这是一篇2018年挂在arXiv上的文章&#xff0c;是一篇针对FL中数据Non-IID的工作。 作者发现&#xff0c;对于高度Non-IID的数据集&#xff0c;FedAvg的准确性下降了55%。 作者提出了可以用权重散度&#xff08;weight divergence&#xff09;来解释这种性能下降&#xff…

Redis跳表

Redis跳表 跳表是一种有序数据结构&#xff0c;它通过在每个节点维持多个指向其他节点的指针&#xff0c;从而达到快速访问节点的目的 跳表支持平均O&#xff08;logN&#xff09;&#xff0c;最坏O&#xff08;N&#xff09;复杂度的节点查找&#xff0c;还可以通过顺序性操作…

【SCAU数据挖掘】数据挖掘期末总复习题库简答题及解析——上

1.K-Means 假定我们对A、B、C、D四个样品分别测量两个变量&#xff0c;得到的结果见下表。 样品 变量 X1X2 A 5 3 B -1 1 C 1 -2 D -3 -2 利用K-Means方法将以上的样品聚成两类。为了实施均值法(K-Means)聚类&#xff0c;首先将这些样品随意分成两类(A、B)和(C、…

【星海随笔】ELK优化

ELS 再遇到大的日志文件的时候不会自动进行清理的,我们可以通过 logrotate 转储工具进行操作。 该命令是基于 Cron 实现,由系统执行,当然也可以手动进行执行例如 logrotate -f configfile# more /etc/logrotate.confweekly // 默认每一周执行一次rotate轮转工作 r…

打造专属 Switch 模拟游戏机

文章目录 2种方案Switch版RetroArchLakka系统 整体性能对比&#xff1a;Lakka更优核心是否兼容&#xff1a;并不兼容整合2种方案&#xff1a;共享游戏ROM和配置、资源等文件夹存储空间优化添加模拟器核心Switch版RetroArchLakka 添加游戏添加特殊类型模拟游戏示例&#xff08;尤…

msf原生shellcode迁移进程后如何获取攻击者ip

msf原生shellcode迁移进程后如何获取攻击者ip仅为ip及端口 木有图&#xff0c;看一下就晓得了 偶尔看到了这个问题&#xff0c;做了一些倒推测试之后得出来的结果 倒推过程 shellcode msf生成一段shellcode&#xff0c;产生的一组16进制数据 msfvenmon -p windows/meterpret…

Ubuntu下使用`sysbench`来测试CPU性能

使用 sysbench 来测试 CPU 性能是一个常见的方法。sysbench 是一个模块化的跨平台基准测试工具&#xff0c;常用于评估系统的各个组件&#xff08;例如 CPU、内存、I/O 子系统等&#xff09;的性能。 下面是如何使用 sysbench 来测试 CPU 性能的基本步骤&#xff1a; 1. 安装…

车载电子电气架构 - 智能座舱技术及功能应用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

论文解读——《I2EDL: Interactive Instruction Error Detection and Localization》

一、研究背景 视觉与语言导航&#xff08;VLN&#xff09;是一个AI领域的研究任务&#xff0c;旨在开发能够按照自然语言指令在三维空间中导航到指定位置的智能体。这项任务与人类的日常活动——如按照口头指示到达某个地点——十分相似&#xff0c;对于推动人机交互的自然性和…

【学习笔记9】一些遇到的如何写code的问题

一、计算e(x)&#xff1a; import math result math.exp(x)import numpy as np result np.exp(x)二、matplotlib.pyplot坐标无法显示中文&#xff1a; plt.rcParams[font.family] [sans-serif] plt.rcParams[font.sans-serif] [SimHei]三、matplotlib.pyplot横纵坐标无法…

【智能算法应用】基于混合粒子群-蚁群算法的多机器人多点送餐路径规划问题

目录 1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】粒子群算法&#xff08;PSO&#xff09;原理及实现 配餐顺序&#xff1a; 采用混合粒子群算法 || 路径规划&#xff1a; 采用蚁群算法 2.数学模型 餐厅送餐多机器人多点配送路径规划&…

配置应用程序的服务和请求处理管道 为啥要在starup而不再program中配置呢

配置应用程序的服务和请求处理管道通常在Startup类中完成&#xff0c;而不是在Program类中&#xff0c;主要基于以下原因&#xff1a; 关注点分离&#xff1a; Program.cs主要关注于应用程序的启动和宿主的构建。它负责初始化应用程序的主机&#xff0c;并设置基本的配置和启动…

linux系统——wget命令

wget命令可以用于下载指定的url地址文件&#xff0c;支持断点续传&#xff0c;支持ftp&#xff0c;http协议下载&#xff0c;在下载普通文件时&#xff0c;即使网络出现故障&#xff0c;依然会不断尝试下载 wget命令直接加url地址 使用-o参数可以将下载文件改名&#xff0c;-c…

【AI】DeepStream(11):deepstream-app源码详解(03)解析配置文件

【AI】AI学习目录汇总 上一篇:【AI】DeepStream(10):deepstream-app源码详解(02)配置文件格式详解 1、简述 deepstream-app的 txt 配置文件,为INI格式,使用 GLib 的 GKeyFile 来解析INI格式的配置文件。 2、解析 application 2.1 配置参数 [application] // 性能测…

python 循环导入(circular imports)解决方法

在 Python 中&#xff0c;大部分人都应该都遇到过循环导入的问题。 循环导入是指两个文件各自尝试导入另一个文件&#xff08;模块&#xff09;&#xff0c;当一个模块没有完全初始化时会导致失败。解决这种情况的最好方法是将代码分层组织&#xff0c;这样导入的关系就会自然…

Java基础 - 多线程

多线程 创建新线程 实例化一个Thread实例&#xff0c;然后调用它的start()方法 Thread t new Thread(); t.start(); // 启动新线程从Thread派生一个自定义类&#xff0c;然后覆写run()方法&#xff1a; public class Main {public static void main(String[] args) {Threa…