当前位置 : 主页 > 编程语言 > python >

Python3 数据类型 集合(set)

来源:互联网 收集:自由互联 发布时间:2022-09-29
一 介绍 类名:set(集合) 定义: 可变的集合定义: 变量名 = { 元素, 元素2, ... } 元素为不可变的任意数据类型。 变量名 = set(可迭代对象) 可迭代对象:字符串(str),列表(list),元祖

一 介绍

  • 类名:set(集合)
  • 定义:
  • 可变的集合定义:
  • 变量名 = { 元素, 元素2, ... }
  • 元素为不可变的任意数据类型。
  • 变量名 = set(可迭代对象)
  • 可迭代对象:字符串(str),列表(list),元祖(tuple)
  • 可迭代对象中的元素:不可变的任意数据类型

s_right = set(['elsa', 20, 'kate', 22]) # 正确
s_wrong = set([['elsa', 20], ['kate', 22]]) # 错误,迭代对象中的元素为可变数据类型

  • 不可变的集合定义:
  • 变量名 = frozenset(可迭代对象)
  • 数据类型的可变与不可变:
  • 不可变数据类型:(对象的内存入口地址与值不可变)不支持增删改
  • 字符串(str),元祖(tuple),数字(int)
  • 可变数据类型:(对象的内存入口地址不可变,其值可变)支持增删改
  • 列表(list),字典(dict),集合(set)
  • 存储原理
  • 无序存储(即定义的顺序与输出的顺序不一致)

s = {3, 2, 1, 0}
print(s) # {0, 1, 2, 3}

  • 应用场景
  • 去除重复的元素
  • 关系运算
  • 常用功能
  • 无下标,无切片,支持for...in...遍历
  • add(),clear(),copy(),pop(),remove(),discard()
  • -,&,^,|

二 常规使用

  • add(元素),新增 1 个元素

s = {1, 2, 3}
s.add('elsa')
print(s) # {'elsa', 1, 2, 3}

  • update(可迭代对象),通过可迭代对象,新增多个元素

s = {1, 2, 3}
s.update( 'elsa' )
print(s) # {1, 2, 3, 's', 'l', 'e', 'a'}

  • copy()
  • 赋值(=)是引用方式,新变量名依然指向旧变量的内存地址
  • copy 是重新赋值,在内存开辟新地址给新变量名

study_python = [1, 2, 3, 4]
set_python = set(study_python)

s1 = set_python.copy()
s2 = set_python

print(s1,id(s1),id(set_python)) # {1, 2, 3, 4} 42452808 42269832
print(s2,id(s2),id(set_python)) # {1, 2, 3, 4} 42269832 42269832

set_python.discard(2)
print(s1,s2) # {1, 2, 3, 4} {1, 3, 4}

  • 删除
  • clear(),清空所有元素
  • pop(),随机删除元素
  • remove(元素),删除元素,元素不存在在报错
  • discard(元素),删除元素,元素不存在则不会报错

三 集合运算

  • 交集(&):算出两个集合中共有的部分

study_python = ['lbc', 'cxl', 'lj', 'njn']
study_mysql = ['lbc', 'lbb', 'lj']

set_python = set(study_python)
set_mysql = set(study_mysql)

print(set_mysql & set_python) # {'lbc', 'lj'}
print(set_mysql.intersection(set_python)) # {'lbc', 'lj'}

print(set_mysql) # {'lbc', 'lbb', 'lj'}
set_mysql.intersection_update(set_python) # 运算并更新
print(set_mysql) # {'lbc', 'lj'}

  • 并集(|):将两个集合合并在一起(去掉重复部分)

study_python = ['lbc', 'cxl', 'lj', 'njn']
study_mysql = ['lbc', 'lbb', 'lj']

set_python = set(study_python)
set_mysql = set(study_mysql)

print(set_mysql | set_python) # {'lbc', 'cxl', 'njn', 'lj', 'lbb'}
print(set_mysql.union(set_python)) # {'lbc', 'cxl', 'njn', 'lj', 'lbb'}
print(set_mysql) # {'lj', 'lbc', 'lbb'}

  • 差集(-)

study_python = ['lbc', 'cxl', 'lj', 'njn']
study_mysql = ['lbc', 'lbb', 'lj']

set_python = set(study_python)
set_mysql = set(study_mysql)

print(set_mysql - set_python) # {'lbb'}
print(set_mysql.difference(set_python)) # {'lbb'}
print(set_mysql) # {'lbb', 'lbc', 'lj'}
set_mysql.difference_update(set_python)
print(set_mysql) # {'lbb'}

  • 补集(^):合并两个集合的非共有部分

study_python = ['lbc', 'cxl', 'lj', 'njn']
study_mysql = ['lbc', 'lbb', 'lj']

set_python = set(study_python)
set_mysql = set(study_mysql)

print(set_mysql ^ set_python) # {'lbb', 'cxl', 'njn'}
print(set_mysql.symmetric_difference(set_python)) # {'lbb', 'cxl', 'njn'}
print(set_mysql) # {'lbb', 'lj', 'lbc'}
set_mysql.symmetric_difference_update(set_python)
print(set_mysql) # {'lbb', 'cxl', 'njn'}

  • 集合关系(父子或交集)

study_python = [1, 2, 3, 4]
study_linux = [1, 2]
study_mysql = [2, 3, 5]
study_excel = [6, 7]

set_python = set(study_python)
set_linux = set(study_linux)
set_mysql = set(study_mysql)
set_excel = set(study_excel)

print(set_python.isdisjoint(set_excel)) # 结果:True。若没有存在交集,则 True
print(set_python.isdisjoint(set_mysql)) # 结果:False

print(set_python.issuperset(set_mysql)) # False
print(set_python.issuperset(study_linux)) # True。set_python 是否是(包含) study_linux 的父集

print(set_linux.issubset(study_python)) # True。 set_linux 是否是 study_python 的子集

四 关系运算

  • >,>=,<,<=

study_python = [1, 2, 3, 4]
study_linux = [1, 2]
study_mysql = [2, 3, 5]
study_excel = [6, 7]

set_python = set(study_python)
set_linux = set(study_linux)
set_mysql = set(study_mysql)
set_excel = set(study_excel)

print(set_python >= set_linux) # True。
print(set_python > set_mysql) # False
print(set_python < set_mysql) # True

上一篇:Python中print函数的八重境界
下一篇:没有了
网友评论