【Python】10、python内置数据结构之集合

一、集合

1、集合的定义

In [74]: s = {}
In [74]: s = {}    # 空大括号是空的字典

In [75]: type(s)
Out[75]: dict

In [77]: type(s)
Out[77]: set

In [78]: help(set)

Help on class set in module builtins:

class set(object)
 |  set() -> new empty set object
 |  set(iterable) -> new set object
 |  
 |  Build an unordered collection of unique elements.
 |  
 |  Methods defined here:
 
 
In [80]: s = set([1, 2])

In [81]: s
Out[81]: {1, 2}

In [82]: s = set("xxj")

In [83]: s
Out[83]: {‘j‘, ‘x‘}

In [84]: s = {1, 2, 1, 3}

In [85]: s
Out[85]: {1, 2, 3}

集合是无序的,元素不能重复,元素要能被哈希(hash,不可变)

二、集合的操作

1、增

z## set.add()

In [86]: s
Out[86]: {1, 2, 3}

In [87]: s.add("a")   # 原地增加单个元素,元素要可哈希

In [88]: s
Out[88]: {1, 2, 3, ‘a‘}

In [89]: s.add(3)

In [90]: s
Out[90]: {1, 2, 3, ‘a‘}

In [93]: s.add([1, 2])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-93-2beaf0c16593> in <module>()
----> 1 s.add([1, 2])

TypeError: unhashable type: ‘list‘

In [94]: help(s.add)

In [95]: s.add((1, 2))

In [96]: s
Out[96]: {(1, 2), 1, 2, 3, ‘a‘}

## set.update()  # 原地增加可迭代对象的元素

In [99]: help(s.update)

Help on built-in function update:

update(...) method of builtins.set instance
    Update a set with the union of itself and others.

    
In [127]: s = set()

In [128]: s
Out[128]: set()

In [129]: type(s)
Out[129]: set  
    
In [101]: s.update(10)
-----------------------------------------------------------------------
TypeError                                 Traceback (most recent call l
<ipython-input-101-c184888ad9c5> in <module>()
----> 1 s.update(10)

TypeError: ‘int‘ object is not iterable

In [131]: s.update(["a"])

In [132]: s
Out[132]: {‘a‘}

In [133]: s.update(["a"], ["b"])

In [134]: s
Out[134]: {‘a‘, ‘b‘}

In [135]: s.update(["a"], ["b"], 1)
-----------------------------------------------------------------------
TypeError                             Traceback (most recent call last)
<ipython-input-135-fc556b8d9726> in <module>()
----> 1 s.update(["a"], ["b"], 1)

TypeError: ‘int‘ object is not iterable

In [136]: s.update(["a"], ["b"], "xj")

In [137]: s
Out[137]: {‘a‘, ‘b‘, ‘j‘, ‘x‘}

In [139]: s.update([["S", "B"]])
-----------------------------------------------------------------------
TypeError                             Traceback (most recent call last)
<ipython-input-139-da563f39a191> in <module>()
----> 1 s.update([["S", "B"]])

TypeError: unhashable type: ‘list‘

2、删

## set.remove()

In [142]: s
Out[142]: {‘a‘, ‘b‘, ‘j‘, ‘x‘}

In [143]: s.remove("a")

In [144]: s
Out[144]: {‘b‘, ‘j‘, ‘x‘}

In [151]: s.remove("S")
-----------------------------------------------------------------------
KeyError                              Traceback (most recent call last)
<ipython-input-151-332efdd48daa> in <module>()
----> 1 s.remove("S")

KeyError: ‘S‘

## set.pop()

In [153]: s = {1, 2, 3, 4}

In [154]: s.pop()    
Out[154]: 1

In [155]: s
Out[155]: {2, 3, 4}

In [156]: s.pop(5)
-----------------------------------------------------------------------
TypeError                             Traceback (most recent call last)
<ipython-input-156-23a1c03efc29> in <module>()
----> 1 s.pop(5)

TypeError: pop() takes no arguments (1 given)

In [157]: s.pop()
Out[157]: 2

In [158]: s.pop()
Out[158]: 3

In [159]: s.pop()
Out[159]: 4

In [160]: s.pop()
-----------------------------------------------------------------------
KeyError                              Traceback (most recent call last)
<ipython-input-160-e76f41daca5e> in <module>()
----> 1 s.pop()

KeyError: ‘pop from an empty set‘

## set.discard()

In [165]: help(set.discard)

Help on method_descriptor:

discard(...)
    Remove an element from a set if it is a member.
    
    If the element is not a member, do nothing.
    
In [166]: s = {1, 2, 3}

In [167]: s.discard(2)

In [168]: s.discard(1, 3)
-----------------------------------------------------------------------
TypeError                             Traceback (most recent call last)
<ipython-input-168-8702b734cbc4> in <module>()
----> 1 s.discard(1, 3)

TypeError: discard() takes exactly one argument (2 given)

In [169]: s.discard(2)   # 元素不存在时,不会报错

In [170]: s
Out[170]: {1, 3}

In [32]: s.clear()

In [33]: s
Out[33]: set()

In [47]: del(s)

In [48]: s
-----------------------------------------------------------------------
NameError                             Traceback (most recent call last)
<ipython-input-48-f4d5d0c0671b> in <module>()
----> 1 s

NameError: name ‘s‘ is not defined

小结:

remove 删除给定的元素,元素不存在时,抛出KeyError

discard  删除给定的元素,元素不存在时,什么也不做

pop      随机删除一个元素并返回,集合为空返回KeyError,

clear     清空集合

3、改

set不能修改单个元素

4、查找

集合不能通过索引,集合不是线性结构,没有索引

集合没有访问单个元素的方法

集合没有查找的方法

做成员运算(in和not in)的时候,set的效率远高于list(O(1)和O(n));

O(n)不一定小于O(1),还需要看数据规模


三、集合的集合操作

时间: 2024-10-27 04:15:26

【Python】10、python内置数据结构之集合的相关文章

python学习笔记--内置数据结构2

1.字符串--是不可变的 定义及初始化 In [577]: s = 'hello wolrd' In [578]: s Out[578]: 'hello wolrd' In [579]: s = "hello python" In [580]: s Out[580]: 'hello python' In [581]: s = '''hello''' In [582]: s Out[582]: 'hello' In [583]: s = """hello&q

python学习笔记--内置数据结构

1.列表--是一个序列,用于顺序的存储数据 列表的定义与初始化 In [374]: lst = list() In [375]: lst Out[375]: [] In [376]: lst = [] In [377]: lst = [1,2,3] In [378]: lst Out[378]: [1, 2, 3] In [379]: lst = list(range(1,10)) In [380]: lst Out[380]: [1, 2, 3, 4, 5, 6, 7, 8, 9] 访问列表元

python课程第二周 内置数据结构——列表和元组

5种内置数据结构:列表.元组.字典.集合.字符串.列表.字典.字符串三种被称为线性结构. 针对线性结构的操作有:切片.封包和解包.成员运算符.迭代. 针对数据结构的操作有解析式:解析式分为列表解析.生成器解析.集合解析和字典解析. 后面三种是Python3.x特有的. 基本框架如下: 一.列表:Python中最具灵活性的有序集合对象类型 列表可包含任何种类的对象:数字.字符串.字典.集合甚至其他列表,这个特性称为异构.还具有可变长度和任意嵌套的特性,属于可变长度序列. (1)列表的初始化,有两种

Python内置数据结构——列表list,元组tuple

内置数据结构分类: 数值型 int , float , complex , bool 序列对象 字符串 str 列表 list tuple(元组) 键值对 集合 set 字典 dict 数字型 int ,float , complex , bool都是class, 1,5.0 , 2+3j都是对象的实例 int : python3的int就是长整型,没有大小限制,受限于内存大小 float:有整数部分和小数部分组成,支持十进制和科学计数法表示,只有双精度型 complex:有实数和虚部组成,实部

Python内置数据结构

内置数据结构 可变 list 列表 byterray dict 字典 set 集合 不可变 tuple 元组 bytes 常量(int,str,bool 等) list 列表 (推荐使用索引)列表相当于一个排列整齐的队列,可以理解为在内存中是一片排列整齐的连续的空间,它是可索引,可变的,有序的,线性结构,可迭代.优点:通过索引(index)查找.替换元素 效率高 时间复杂度O(1).尾部追加(append)与 尾部移除(pop)元素快 效率高 时间复杂度O(1).缺点:从中间增加或移除元素会使列

Python内置数据结构操作VS sqlite3操作

1.摘要 在同一数据库中查询某值,内置数据结构的查询速度快还是数据库sqlite3的查询速度快?针对这一问题,通过构建一个包含2500个随机数的列表,并将其插入sqlite3数据库中,利用timeit模块,分别对内置数据结构list和sqlite3查询某一值在不在数据组中进行对比. 2.代码 >>> import numpy as np >>> import sqlite3 >>> test=np.random.randn(2500) >>

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(1)

CHAPTER 10 ASM Persistent Data Structures 与传统文件系统和卷管理器一样,ASM存储元数据用来描述和跟踪磁盘组的内容.所有的元数据描述存储在上面的ASM磁盘组的组成和内容,这些元数据使得磁盘组实现了自描述.ASM磁盘组有两类元数据:物理元数据和虚拟元数据.物理元数据位于磁盘上.虚拟元数据存储在ASM文件中,因此与其他ASM文件一样这些元数据均匀分布在磁盘组的磁盘上.RDBMS无法打开ASM读取元数据目录也不能对ASM物理元数据的位置执行读写(I/O)操作.

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(2)

Free SpaceTable(FST) FST指明了ATB中包含的空闲空间.当磁盘被选择分配时ASM会生成一个磁盘FST.这个允许ASM跳过被ATBs占用的空间.FST包含每个ATB的条目.每个条目描述了extents size的总数和空闲extents.FST的目的是优化分配操作.事实上FST位于AllocationTable中.FST位于每个AT的第二个block(block 1). PartnershipStatus Table(PST) PST跟踪磁盘组资格和磁盘间的配合关系.ASM生

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(3)完

Disk Directory Disk Directory包含了磁盘组中所有的磁盘信息.Disk Directory信息比PST更为详细.磁盘组中的每一块盘都有一个条目以数字为索引.Disk Directory的文件号在每个磁盘组中都是2号(F2). Disk Directory中的字段如下: n  Disk name n  Failure group name n  Disk size n  Disk free space n  Disk creation time Disk Director