• Python第三周Round1-集合


    略微不爽,视频讲课的,换老师了,听的有点别扭,在闹了两天小情绪后,还是决定继续听了,看书看不进去,自己立了flag,含着泪也得竖起来啊。听了两段发现,也还可以,人TM的就是喜欢将就,没办法。

    新接触了<class 'set'>数据类型,让我对python又产生了新的看法,可能还会有其他的数据类型,做好思想准备(因为特么方法太多,难受)。

    一、集合

    <class 'set'>

    (一)对以往数据类型做个总结

    1.变量

    其实从程序的角度来看, 变量就是用来记录状态的变化。也是说,给一个玩意附加一个铭牌,告诉Python(或其他语言),这个玩意叫啥。

    以上这行字,码的很没水平。

    2.对一些数据类型进行分类

    (1)按可变不可变来分(在内存中地址)

    每一个变量被赋值后,都会在内存中开辟一块空间,俗话说“使用内存”,根据开辟的这块空间可不可以改变,进行如下分类(专门写给chicken看的,后续有用):

    • 可变:列表、字典
    # 实践证明,字典也是可变的数据类型
    dic = {'name': '小果果', 'age': '2'}
    print(id(dic))  # 输出dic在内存中的位置
    dic['name'] = '名字'  # 修改字典中value的值
    print(dic, id(dic))
    dic.pop('name')  # 删除字典中的数据keys和value
    print(dic, id(dic))
    dic.update({'cloar': '棕色的'})  # 增加字典中的keys和value
    print(dic, id(dic))
    

      

    • 不可变:字符串、元祖、数字
    name = 'hello'
    print(id(name))
    name = '你好'
    print(id(name))
    

     

    (2)按访问顺序

    • 顺序访问(有序的):字符串、列表、元祖;
    • 映射(无序的):字典;
    • 直接访问:数字;

    (3)存放元素个数

    • 容器类型:列表、元祖、字典
    • 原子类型:字符串、数字

    (二)集合的知识

    集合也是一种数据类型,有三大基本特点:

    • 无序
    • 不同元素
    • 必须是不可变的变量

    创建集合

    # 下面定义的这个name集合会报错,因为内含字典这种可变量
    name = {{'name': '小果果', 'age': '2'}, 2, 'hello'}
    print(name)
    

      

    用{set}创建,和字典一样,用大括号,只是没有映射关系的冒号。

    1.name={1,2,3}

    2.name=set{1,2,3}

    注意,用 2. 方法,如果大括号内为可迭代数据类型,一般都给拆开,把迭代元素一个个放到集合中。

    (三)基本方法

    因为是无序的,和dict一样,无索引、无切片、无del、无index等功能

    1.add()方法

    2.clear()方法

    3.copy()方法

    4.pop()方法 #随机删除一个元素

    5.remove()方法 #删除元素不存在时,报错

    6.discard()方法 #删除元素不存在,不报错

    (四)关系运算

    1.交集

    # 求交集
    s1 = {'没有起床气的', '小果果', '棕色的'}
    s2 = {'小果果', '卷毛的', '胆小的'}
    print(s1.intersection(s2))  # 输出 {'小果果'}
    print(s1 & s2)
    

      

    2.并集

    # 求并集
    s1 = {'没有起床气的', '小果果', '棕色的'}
    s2 = {'小果果', '卷毛的', '胆小的'}
    print(s1.union(s2))  # 输出 {'小果果', '没有起床气的', '棕色的', '胆小的', '卷毛的'}
    print(s1 | s2)
    

      

    3.差集

    # 求差集,s1有,s2中没有的
    s1 = {'没有起床气的', '小果果', '棕色的'}
    s2 = {'小果果', '卷毛的', '胆小的'}
    print(s1.difference(s2))  # 输出 {'没有起床气的', '棕色的'}
    print(s1 - s2)
    

      

    需要注意set.difference_updats()用法,此为对s1进行update赋值,同理,intersection_update()、symmetric_difference_update()方法,知道就行,不用记住。

    4.补集

    # 求补集,把s1和s2不一样的输出
    s1 = {'没有起床气的', '小果果', '棕色的'}
    s2 = {'小果果', '卷毛的', '胆小的'}
    print(s1.symmetric_difference(s2))  # 输出 {'卷毛的', '没有起床气的', '棕色的', '胆小的'}
    print(s1 ^ s2)
    

      

    (五)其他方法

    1.isdisjoint() #两个集合是否有交集,有交集返回False

    2.issubset() #两个集合是否有子集

    3.issuperset() #是否有父集

    4.update() #放多个值进去,可迭代数据类型都可以,区分下union()

    (六)其他注意事项

    集合是可变数据类型,但可以定义成不可变集合

    frozenset()方法定义。

    总结:

     列表元组集合字典
    英文 list tuple set dict
    可否读写 读写 只读 读写 读写
    可否重复
    存储方式 键(不能重复) 键值对(键不能重复)
    是否有序 有序 有序 无序 无序,自动正序
    初始化 [1,'a'] ('a', 1) set([1,2]) 或 {1,2} {'a':1,'b':2}
    添加 append 只读 add d['key'] = 'value'
    读元素 l[2:] t[0] d['a']
  • 相关阅读:
    conda 激活环境失败解决办法
    openSmile-2.3.0在Linux下安装
    Ubuntu16.04下安装多版本cuda和cudnn
    几个最新免费开源的中文语音数据集
    train loss与test loss结果分析
    文件路径
    Properties类与配置文件
    内省
    Junit单元测试
    Hdfs常用命令
  • 原文地址:https://www.cnblogs.com/cnafzyx/p/10189537.html
Copyright © 2020-2023  润新知