Python基础08-数据类型:集合set

news/2024/7/3 2:36:20

目录

集合的概念

集合的方法

集合可变吗?


集合的概念

先理解一些概念。

数据类型按照是否可变分为可变类型、不可变类型。按照访问方式可以分为顺序访问、映射访问。

如何区分可变类型、不可变类型?就看在内存中存储内容是否可以被修改。如果内存地址不变,内容可以修改,那么就是可变类型。如果内存地址变化,重新分配了内存,再在新分配内存里面存入修改后的内容,那么就是不可变类型。

可变的数据类型有:列表、字典。

不可变的数据类型有:数字、字符串、元组。

数据类型按照访问方式可以分为顺序访问、映射访问。

顺序访问的数据类型有:字符串、元组、列表。

映射访问的数据类型有:字典。

# 不可变的数据类型,同一个变量名,修改内容后内存地址发生变化
i = 1
print(i, id(i))
i = 2
print(i, id(i))s = "oracle"
print(s, id(s))
s = "mysql"
print(s, id(s))t = (1, 0,)
print(t, id(t))
t = (-2, 3)
print(t, id(t))# 可变的数据类型,同一个变量名,修改内容后内存地址不变
li = [11, 22]
print(li, id(li))
li.append(33)
print(li, id(li))d = {"db": "mysql", "storage": "iscsi"}
print(d, id(d))
d["db"] = "oracle"
print(d, id(d))# 1 8791481095840
# 2 8791481095872
# oracle 31318384
# mysql 31318512
# (1, 0) 31315392
# (-2, 3) 38789824
# [11, 22] 38739840
# [11, 22, 33] 38739840
# {'db': 'mysql', 'storage': 'iscsi'} 31252160
# {'db': 'oracle', 'storage': 'iscsi'} 31252160

再来说集合的概念。集合是用{}将元素括起来的数据类型。集合的元素是不同的、集合的元素是无序的、集合的元素必须是不可变的数据类型。

# 集合s只有4个元素
s = set("hello")
print(s)
# 并没有顺序
# {'o', 'l', 'h', 'e'}

集合的方法

集合的删除方法有pop、remove、discard。

s = {"mysql", 1, "oracle", 3, 4, 5, 6}
print(s)# 随机删除一个元素,
s.pop()
print(s)# 删除指定元素,如果元素不存在会报错
s.remove("mysql")
print(s)# 删除指定元素,如果元素不存在什么也不做
s.discard("db2")
print(s)

集合的交集intersection、并集union、差集difference、交叉补集symmetric_difference。定义和数学上集合的交集、并集、差集、交叉补集是一样的,也可以用四种符号来计算分别是&、|、-、^。

s1 = {"mysql", "oracle", "sqlserver"}
s2 = {"mysql", "db2", "oracle"}# 交集 {'mysql', 'oracle'}
print(s1.intersection(s2))
print(s1 & s2)# 并集 {'db2', 'mysql', 'sqlserver', 'oracle'}
print(s1.union(s2))
print(s1 | s2)# 差集
# {'sqlserver'}
print(s1.difference(s2))
print(s1 - s2)
# {'db2'}
print(s2.difference(s1))
print(s2 - s1)#交叉补集 {'sqlserver', 'db2'}
print(s1.symmetric_difference(s2))
print(s1 ^ s2)

交集、并集、差集、交叉补集再update,那么就相当于将结果集赋值给原来的集合。

s1 = {"mysql", "oracle", "sqlserver"}
s2 = {"mysql", "db2", "oracle"}# 相当于 s1 = s1.intersection(s2)
s1.intersection_update(s2)# 相当于 s1 = s1.union(s2)
s1.update(s2)# 相当于 s1 = s1.difference(s2)
s1.difference_update(s2)# 相当 s1 = s1.symmetric_difference(s2)
s1.symmetric_difference_update(s2)

判断是否有交集、是超集、是子集。

s1 = {"oracle", "sqlserver"}
s2 = {"mysql", "db2"}
s3 = {"mysql"}# 判断没有交集时为True
print(s1.isdisjoint(s2)) # True
print(s2.isdisjoint(s3)) # False# 判断是超集、子集
print(s2.issubset(s2)) # True
print(s3.issubset(s2)) # True
print(s2.issuperset(s2)) # True
print(s2.issuperset(s3)) # True

集合可变吗?

集合本身是可变类型。

但是frozenset集合是不可变类型。这个集合不能增删元素。

s = frozenset("hello")

 


http://lihuaxi.xjx100.cn/news/236109.html

相关文章

机器学习-线性回归LinearRegression

概述 今天要说一下机器学习中大多数书籍第一个讲的(有的可能是KNN)模型-线性回归。说起线性回归,首先要介绍一下机器学习中的两个常见的问题:回归任务和分类任务。那什么是回归任务和分类任务呢?简单的来说&#xff0c…

在 Node.js 中用子进程操作标准输入/输出

翻译:疯狂的技术宅原文:http://2ality.com/2018/05/chi... 本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章 在本中,我们在 Node.js 中把 shell 命令作为子进程运行。然后异步读取这些进…

Python基础09-字符串格式化

字符串格式化。主要是%格式,format格式化方法,具体写在代码例子的注释里。 msg list() # %s 接收字符串 msg.append("i am %s, which is a database." % "mysql") msg.append("i am %s, which is a %s." % ("db2&q…

个人项目-小学四则运算 “软件”之初版

本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166 我的github远程仓库的地址:https://github.com/yanyuluu/yanyuluu/tree/master/ruanjiangc 第一部分:要求 具体要求:任何编程语言都可以&#xf…

单例测试模式中【饿汉式】与【懒汉式】的区别

package day25.thread;/** /*** author Mr Chen* create 2018-10-09 18:37* 单例测试模式:保证类在内存中只有一个对象*/ public class Dome01 {public static void main(String[] args){Singleton s1 Singleton.s; //成员变量被私有&#xf…

Python基础10-函数基础

目录 函数的定义 函数的返回值 函数的参数 参数的传递 参数的默认值 可变长参数 全局变量与局部变量 函数嵌套定义 风湿理论——函数即变量 函数的定义 定义函数的关键字def。函数名,本例函数名是test。小括号里面是参数。冒号后缩进的代码块是函数内容。…

电脑录音软件哪个好,怎么用电脑录音

如今科技迅速发展,不仅唱歌的时候喜欢录音,就连追剧看电视都喜欢把一些经典或者搞笑的音频录制下来,很多喜剧给我们的休闲时光带来了欢声笑语,碰到经典的对话或者旁白总想录制下来,那电脑录音软件哪个好,怎…

Python基础11-函数式编程与内置函数

目录 函数即变量 lambda关键字定义匿名函数 高阶函数 内置函数map 内置函数filter 内置函数reduce 内置函数看文档 函数即变量 书接上回,Python里面,函数就是变量,可以被当成普通变量一样作为返回值,调用。 def foo():pr…