zoukankan      html  css  js  c++  java
  • Python学习---Python下[set集合]的学习

    Set集合[可变]是一个无序的,不重复的数据组合,它的主要作用如下:

                1. 去重,把一个列表变成集合,就自动去重了

                2. 关系测试,测试两组数据之前的交集、差集、并集等关系

    集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。

    集合分类:可变集合、不可变集合

        可变集合(set):可添加和删除元素,非可哈希的[但是要求自己的元素是可Hash的],不能用作字典的键,也不能做其他集合的元素

        不可变集合(frozenset):与上面恰恰相反

    创建结合:

          利用set()/ frozenset()创建,且元素必须是不可变的,利用大括号{}输出包装

    # 错误的创建
    s = set('a', 1, 'b')
    print(s)          # TypeError: set expected at most 1 arguments, got 3 
    
    li = [1, 2, 'a', 'b']
    s = set(li)       # 列表变为集合
    print(s)  # {1, 2, 'a', 'b'}
    
    li2 = [1, 2, 1, 'a', 'a']
    s = set(li2)
    print(s)          # 去重后: {1, 2, 'a'}
    
    li = [[1, 2,], 'a', 'b']
    s = set(li)   # 报错,TypeError: unhashable type: 'list'
    
    # set
    s1 = set('hello')
    print(s1)         # {'h', 'l', 'o', 'e'}
    # frozenset
    s2 = frozenset('hhh')
    print(s2)         # frozenset({'h'})

    访问集合

    由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not  in来访问或判断集合元素。

    s1 = set('hello world')
    print('a' in s1)       # True
    print('b' in s1)       # False
    # s1[1]  #TypeError: 'set' object does not support indexing
    # 循环迭代无序输出
    for i in s1:
        print(i, end='	')   # e w o r d l h	
    # 直接输出
    print(s1)    # {'h', 'w', 'r', 'l', 'o', 'd', 'e', ' '} 输入里面有空格,输出也有空格

    更新集合

    s.add() :元素作为一个整体添加进去
    s.update(): 必须添加的是一个序列,列表[可以理解为添加,但是是一个字符一个字符序列化的添加]
    s.remove():删除掉某一个元素
    s.pop():删除任何一个元素,因为set集合是无序的,删除的随机性
    s.clear(): 清空set里面的值
    del set(): 删除set集合

    s1 = set('apple')
    print("原始set集合  :", s1)
    s1.add('samsung')
    print("add后的set   : ", s1)
    s1.update('huawei')
    print("update后的set:", s1)
    s1.remove('a')           # 因为添加的是序列后的单个字符,所以不能直接输入
    print("remove后的set:", s1)
    s1.pop()
    print("pop后的set   :", s1)
    s1.clear()
    print("clear后的set :", s1)
    del s1
    # print("del后的set   :", s1)  # 报错 NameError: name 's1' is not defined

    image

    集合类型操作符

    1   in ,not in
    2   集合等价与不等价(==, !=)
    3   子集、超集

    4   联合(|)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()

    子集和超集: 父集必须多于子集和一个字符

                      S1是S0的父集合: s1.issuperset(s0)  ==> s1 > s0

                      S0是S1的子集合: s0.issubset(s1)    ==> s0 < s1

    s1 = set('applesamsung')
    s0 = set('apple')
    print("原始set集合[s0]   :", s0)
    print("原始set集合[s1]   :", s1)
    print('s1是s0的父集合    :', s1 > s0)   # 父集必须多于子集和一个字符
    print('s1是s0的issuperset:', s1.issuperset(s0))   # 父集必须多于子集和一个字符
    print('s0是s1的父集合    :', s0 < s1)   # 父集必须多于子集和一个字符
    print('s0是s1的issubset  :', s0.issubset(s1))   # 父集必须多于子集和一个字符

    image

    交集: s0.intersection(s1)  ==> s0 & s1

    并集: s0.union(s1)   ==> s0 | s1

    差集: s0.difference(s1)   ==> s0  - s1   【以S0为基础进行对比,in s0 not in s1】

    对称差集: s0.symmetric_difference(s1)  ==> s0 ^ s1

    s0 = set([1, 2, 3, 4, 5])
    s1 = set([4, 5, 6, 7, 8])
    print("原始set:s0:", s0)
    print("原始set:s1:", s1)
    print("【交集】and  :", s0.intersection(s1))  # 取出交集
    print("【交集】s0&s1:", s0&s1)  # 取出交集
    print("【并集】     :", s0.union(s1))         # 取出并集
    print("【并集】s0|s1:",s0 | s1)             # 取出并集
    print("【S0差集】   :", s0.difference(s1))    # 以S0为主, in S0 not in S1
    print("【差集】s0-s1:", s0-s1)    # 以S0为主, in S0 not in S1
    print("【S1差集】   :", s1.difference(s0))    # 以S1为主, in S1 not in S0
    print("【差集】s1-s0:", s1-s0)    # 以S0为主, in S0 not in S1
    print("【对称差集】      :", s1.symmetric_difference(s0))  # 除了公共的元素以外的元素
    print("【对称差集】s0 ^s1:", s1 ^ s0 )  # 除了公共的元素以外的元素

    image

    set集合应用:最简单的去重

    '''最简单的去重方式'''
    lis = [1,2,3,4,1,2,3,4]
    print list(set(lis))    #[1, 2, 3, 4]

     
  • 相关阅读:
    ecshop 浏览历史样式的修改
    ECSHOP任意页面调用商品属性
    ECShop url路径 商品详情页goods 商品列表页category 修改成你想要的
    ecshop模板增加新lbi库文件注意事项
    最完美带qq昵称qq头像的qq帐号登录ecshop插件
    ECSHOP2.72 前台调用 定单号,及收货人,快递号
    ecshop后台帐号密码忘记了怎么办?
    ECSHOP首页成功实现订单上下滚动
    ECSHOP 注册就送红包
    ECSHOP隐藏帮助中心文章页的评论功能方法
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9382308.html
Copyright © 2011-2022 走看看