• python 数据结构


    在python里面,把不同的元素组成一起形成集合。

    集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键(所有元素都不相同)

    创建集合:

      创建一个空集合只能用set(),用set(seq)创建集合时,只能是单个参数,seq为序列(字符串、列表等),且可哈希(序列里面的值都是不能改变的,无论是深层还是浅层。与元组不同,元组只是浅层不能改,深层可以)

     1 >>> se = {}
     2 >>> se
     3 {}
     4 >>> type(se)
     5 <class 'dict'>           #用 {} 直接创建的是空字典,不是空集合
     6 >>> se1 = set()
     7 >>> se1
     8 set()
     9 >>> type(se1)
    10 <class 'set'>
    11 >>> 

      创建一个非空集合:

     1 >>> se = {1,2,3,4,'a','b',}
     2 >>> type(se)
     3 <class 'set'>
     4 >>> se1 = {1,2,3,4,'a','b',[1,2]}
     5 Traceback (most recent call last):
     6   File "<pyshell#95>", line 1, in <module>
     7     se1 = {1,2,3,4,'a','b',[1,2]}
     8 TypeError: unhashable type: 'list'
     9 
    10 >>> se2 = {1,2,3,4,'a','b',(1,2,'m',),}
    11 >>> se2
    12 {(1, 2, 'm'), 1, 2, 3, 4, 'a', 'b'}
    13 >>> type(se2)
    14 <class 'set'>
    15 
    16 >>> se3 = {1,2,3,4,'a','b',{'name':'root','job':'python',},}
    17 Traceback (most recent call last):
    18   File "<pyshell#102>", line 1, in <module>
    19     se3 = {1,2,3,4,'a','b',{'name':'root','job':'python',},}
    20 TypeError: unhashable type: 'dict'
    21 
    22 >>> se4 = {1,2,3,4,'a','b',{'name','root','job','python',},}
    23 Traceback (most recent call last):
    24   File "<pyshell#103>", line 1, in <module>
    25     se4 = {1,2,3,4,'a','b',{'name','root','job','python',},}
    26 TypeError: unhashable type: 'set'
    27 >>> 

      由上面可以看出,通过{}无法创建含有list/dict元素的set。

     1 >>> l = [1,2,3,'a','b']
     2 >>> se = set(l)
     3 >>> se
     4 {1, 2, 3, 'a', 'b'}
     5 
     6 >>> l = [1,2,3,'a','b',[5,6,],]
     7 >>> se = set(l)
     8 Traceback (most recent call last):
     9   File "<pyshell#109>", line 1, in <module>
    10     se = set(l)
    11 TypeError: unhashable type: 'list'
    12 
    13 >>> se = {1,3,5,'a',}
    14 >>> se1 = set(se)
    15 >>> se1
    16 {1, 3, 'a', 5}
    17 
    18 >>> d = {'name':'root','job':'python',}
    19 >>> se = set(d)
    20 >>> se
    21 {'job', 'name'}
    22 >>> 

      由上面可以看出,通过set()方法也只能接收一层list、dict、set等创建一个集合。且在把字典转换为集合时,只是把键名抽出来作为集合的元素。

    集合方法:

     1 #集合的内置方法
     2 se = set()
     3 
     4 add(x)
     5 '''把元素x加入到集合中。若元素已存在也没影响,只留一个'''       #这里添加只能添加不变数据类型的元素(hashable),可以添加元祖,其他list、dict、set都不行
     6 remove(x)
     7 '''从集合中删除x,若x不存在,返回一个KeyError'''
     8 discard(x)
     9 '''从集合中删除x,若x不存在,do notng'''
    10 pop()
    11 '''随机删除集合中的任意一个值,并返回。若为空集合,返回一个KeyError'''
    12 clear()
    13 '''清空整个集合的元素,留下空集合'''
    14 copy()
    15 '''返回一组浅拷贝'''
    16 set1.union(set2)
    17 '''收集两个集合中的所有元素,创建并返回一个新集合'''
    18 set1.difference(set2)
    19 '''根据一个集合中不存在于另一个集合中的元素,创建一个新集合,新集合元素为set1中元素'''
    20 set1.difference_update(x)
    21 '''删除集合set1中与迭代器x中值相等的元素( x 必须为可迭代对象),修改集合set1,返回None'''
    22 set1.intersection(set2)
    23 '''根据两集合中共有的元素创建一个新集合(求两个集合的交集)'''
    24 set1.intersection_update(set2)
    25 '''更新set1为两个集合的交集,set2不变'''
    26 set1.isdisjoint(set2)
    27 '''如果两个集合没有交集,则返回True'''
    28 set1.issubset(set2)
    29 '''判断set1是否是set2的子集,返回True or False'''
    30 set1.issuperset(set2)
    31 '''判断set1是否是set2的父集,返回True or False'''
    32 set1.symmetric_difference(set2)
    33 '''根据两个集合中所有不存在于对方的元素(去掉交集),创建并返回一个新集合'''
    34 set1.symmetric_differencr_update(set2)
    35 '''根据两个集合所有不存在于对方的元素(去掉交集),更新集合set1'''
  • 相关阅读:
    设计模式——适配器模式
    设计模式——模板方法模式
    03-Web开发(上)
    02-配置文件
    01-QuickStart
    34-多线程(下)
    33-IO(下)
    15-后端编译与优化(待补充)
    14-线程安全与锁优化
    13-JUC(下)
  • 原文地址:https://www.cnblogs.com/xtsec/p/6602771.html
Copyright © 2020-2023  润新知