首页 > 编程语言 >PYTHON 数据结构 - 集合

PYTHON 数据结构 - 集合

时间:2022-12-01 11:45:40浏览次数:38  
标签:数据结构 1.2 PYTHON 元素 update set 集合 difference

1.1 集合

是一种可迭代的,无序的,不能包含重复元素的数据结构。集合的元素是不可变的,如:int, float, string ,tuple等,可变的内容不可以是集合的元素,如:list, dict, set等。

集合可分为:

  • 可变集合(set)
  • 不可变集合(frozenset)

1.2 可变集合

1.2.1 创建集合

>>> a = {1,3,2,4}
>>> a
{1, 2, 3, 4}

用大{}表示,注意:字典也用{}表示,但里面存放的是键值对。

>>> a = set()  # 创建空集合,如果 a={} 是空字典
>>> a
set()

用set函数创建集合,里面跟上一个序列:

>>> a = set("hello")
>>> a
{'e', 'o', 'h', 'l'}

1.2.2 修改可变集合

  • 添加元素: add(elem)

    注意:不能添加重复元素,因为集合元素不重复。

>>> a = set()
>>> a = {1,2,3,4}
>>> a.add(5)
>>> a
{1, 2, 3, 4, 5}
>>> a.add(4)
>>> a
{1, 2, 3, 4, 5}
  • 删除元素:remove(elem); discard(elem)

    两种元素的区别是:删除不存在的元素前才抛出异常,后者不会。

>>> a = {1,2,3,4}
>>> a.remove(1)
>>> a
{2, 3, 4}
>>> a.discard(4)
>>> a
{2, 3}
>>> a.remove(4)  # 4不存在,抛出异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 4
  • 删除任意一个元素,返回值是删除的元素:pop()
>>> a = {1,3,2,4}
>>> a.pop()
1
  • 清空集合: clear()
>>> a = {1,2,3,4}
>>> a.clear()
>>> a
set()

1.2.3 其它方法

  • 复制一个集合: copy()
>>> a = {1,2,3,4}
>>> b = a.copy()
>>> b
{1, 2, 3, 4}
  • 两个集合空交集返回真: isdisjoint()
>>> a = {1,2,3,4}
>>> b = {1,2}
>>> a.isdisjoint(b)  # 有交集返回False
False
  • 是子集返回真: issubset()
>>> a = {1,2,3,4}
>>> b = {1,2,3,4,5}
>>> a.issubset(b)
True
>>> b.issubset(a)
False
  • 是超集返回真: issuperset()
>>> a = {1,2,3,4,5}
>>> b = {1,2}
>>> c = {1,2,6}
>>> a.issuperset(b)
True
>>> a.issuperset(c)
False
  • 合并集合到集合A:update()
>>> a = {1,2,3,4}
>>> a.update({3,4,5,6})
>>> a
{1, 2, 3, 4, 5, 6}

1.2.4 集合的运算

运算符 说明
& 交集:获取两个集合都存在的元素
| 并集:两个集合元素合并在一起,去掉重复的。
- 差集:属于集合A,但不属于集合B的
^ 对称差集:只属于集合A,集合B,即去掉交集剩下的。
== 相等
!= 不相等
in 在里面
not in 不在里面
  • 交集:intersection; intersection_update
>>> a = {1,2,3,4}
>>> b = {1,2}
>>> a & b
{1, 2}
>>> a.intersection(b)
{1, 2}

# intersection_update会修改集合A,而前者生成新的集合
>>> a = {1,2,3,4}
>>> b = {3,4,5,6}
>>> a.intersection_update(b)
>>> a
{3, 4}
  • 并集:union
>>> a = {1,2,3,4}
>>> b = {5,6}
>>> a | b
{1, 2, 3, 4, 5, 6}
>>> a.union(b)
{1, 2, 3, 4, 5, 6}
  • 差集:difference;difference_update()
>>> a = {1,2,3,4}
>>> b = {1,2}
>>> a - b
{3, 4}
>>> a.difference()
{1, 2, 3, 4}
>>> b - a  # 反过来减,去掉之后没有元素了。
set()

# difference_update 会修改集合A
>>> a = {1,2,3,4}
>>> b = {3,4,5,6}
>>> a - b
{1, 2}
>>> a  # 没变
{1, 2, 3, 4}
>>> a.difference_update(b)
>>> a  # 变了
{1, 2}
  • 对称差集:symmetric_difference(); symmetric_difference_update()
>>> a = {1,2,3,4}
>>> b = {3,4,5,6}
>>> a ^ b
{1, 2, 5, 6}
>>> a.symmetric_difference(b)
{1, 2, 5, 6}

# symmetric_difference_update 修改集合A

1.2.5 通用函数

函数 说明
enumerate() 给元素编号,返回一个enumerate对象
len() 长度
max() 最大值
min() 最小值
sorted() 排序,生成新列表
sum() 求和
>>> a = {'a','b','c','hello'}
>>> a
{'a', 'b', 'hello', 'c'}
>>> for i in enumerate(a):
...     print(i)
...
(0, 'a')
(1, 'b')
(2, 'hello')
(3, 'c')

1.3 不可变集合 frozenset

称为冻结集合,不可更改,但可以访问和集合运算。

不可变集合可以做为字典的键,可以做为集合的元素。

# 创建
>>> a = frozenset(["张三","李四","hello",1,2,3])
>>> a
frozenset({1, 2, 3, 'hello', '张三', '李四'})
>>> type(a)
<class 'frozenset'>

1.4 集合推导式

同列表推导式

# [item for item in iterable]
# [item for item in iterable if condition]

>>> a = {i for i in range(10)}
>>> a
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

标签:数据结构,1.2,PYTHON,元素,update,set,集合,difference
From: https://www.cnblogs.com/three-sheep/p/16940942.html

相关文章

  • Python高级-多继承以及MRO顺序-笔记
    1.单独调用父类的方法#coding=utf-8print("******多继承使用类名.__init__发生的状态******")classParent(object):def__init__(self,name):print('paren......
  • 数据结构(6):串(上)
    字符串简称串,计算机上非数值处理的对象基本都是字符串数据。我们常见的信息检索系统(如搜索引擎)、文本编辑程序(如Word)、问答系统、自然语言翻译系统等,都是以字符串数据作为......
  • 数据结构(4):队列(上)
    上回说到,栈常见的三个应用:括号匹配、表达式求值以及递归。这一会我们来看一看另一个操作受限的线性表:队列!队列的基本概念队列的定义队列(Queue)简称队,也是一种操作受限的线性......
  • 数据结构(3):栈(上)
    上一回,我讲了一下链表的应用:一元多项式,这一回,我们来看到一个全新的数据结构:栈!栈的基本概念栈的定义栈(Stack)是一种只允许在一端进行插入或删除操作的线性表。首先栈是一种线......
  • 单链表指定区间反转(python)
    单链表中的第m和n之间元素反转m=2,n=4具体做法:step1:我们可以在链表前加一个表头,后续返回时去掉就好了,因为如果要从链表头的位置开始反转,在多了一个表头的情况下就......
  • 流畅的Python 电子书 pdf
    [巴西]LucianoRamalho著安道,吴珂译 流畅的python这本书能够帮助Python开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维......
  • python连接使用达梦
     #!/usr/bin/envpython#coding=utf-8importos,json,urllib,datetime,shutilimportpsycopg2importtracebackimporttimegl_mysql_server="192.168.1.118"......
  • Python制作进度条
    目录tqdm进度条什么时候需要进度条?tqdm基本概念基础用法设置进度条信息自定义控制图形化进度条本博客主要参考为北京大学陈斌老师的下一站Pythontqdm进度条什么时候需......
  • python3 venv虚拟环境创建与安装Django
    创建虚拟环境C:\Users\Xiao>python-mvenvD:\Pythonwork\venvtest​​激活虚拟环境C:\Users\Xiao>D:\Pythonwork\venvtest\Scripts\activate(venvtest)C:\Users\Xiao>​......
  • Python高级-GIL(全局解释器锁)-笔记
    GIL面试题如下描述PythonGIL的概念,以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因。Guido的声明:​​h......