10.集合类型

目录

·作用,定义

·类型转换

·内置方法

        1.优先掌握(关系运算,去重)

        2.其他内置方法(删除元素,更新update(),添加add,交集)


·作用,定义

集合三大特点:存必须为不可变类型,无序,不重复
1.作用:关系运算,去重
    1.1关系运算
        friend1 = ['zcr', 'dfg', 'rty', 'yui']
        friend2 = ['rty', 'dfg', 'mjy', 'sdt']
        找出共同好友普通for遍历:
            l1 = []
            for i in friend1:
                if i in friend2:
                l1.append(i)
            print(l1)                                   # ['dfg', 'rty']

        集合关系
            print(list(set(friend1) & set(friend2)))    # ['dfg', 'rty']

    1.2去重


2.定义:在{}内用逗号分隔开多个元素,多个元素满足以下三个条件:
       1.集合内元素必须为不可变类型
       2.打印出来的集合元素无序
       3.打印出来的集合元素没有重复

    s1 = {1, 2}        # s = set({1, 2})
    s2 = {}            # 默认为空字典
    s3 = set()         # 定义新集合方法
    print(type(s3))    # <class 'set'>

·类型转换

类型转换
    但凡能被for循环的遍历的数据类型
        (强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型
        print(set([1, 2, 3, 4]))                # {1, 2, 3, 4}

        print(set((1, 2, 3, 4)))                # {1, 2, 3, 4}

        print(set({'name': 'wsx', }))         # {'name'}

        print(set('zcy'))                       # {'c', 'y', 'z'}

        print(set({12, 'fb', [12, 2]}))         # 错误,循环出来的元素有可变类型

        print(set({'k1': 123, 'k2': 456}))      # {'k1', 'k2'}

·内置方法

        1.优先掌握(关系运算,去重)

1.关系运算
    friend1 = {'zcr', 'dfg', 'rty', 'yui'}
    friend2 = {'rty', 'dfg', 'mjy', 'sdt'}
    1.1取交集(2种):
        print(friend1 & friend2)                    # {'dfg', 'rty'}
        print(friend1.intersection(friend2))        # {'dfg', 'rty'}

    1.2合集/并集(2种):
        print(friend1 | friend2)                    # {'zcr', 'dfg', 'yui', 'sdt', 'rty', 'mjy'}
        print(friend1.union(friend2))               # {'zcr', 'dfg', 'yui', 'sdt', 'rty', 'mjy'}

    1.3差集(2种):
        print(friend1 - friend2)                    # 求f1独有的    {'yui', 'zcr'}
        print(friend1.difference(friend2))
        print(friend2 - friend1)                    # 求f2独有的    {'mjy', 'sdt'}
        print(friend2.difference(friend1))

    1.4对称差集(2种) 求两个用户独有的好友们(即去掉共有的好友):
        print(friend1 ^ friend2)                    # {'yui', 'mjy', 'sdt', 'zcr'}
        print(friend1.symmetric_difference(friend2))

    1.5父集(2种):一个集合是否包含另外一个集合
        print({1, 2, 3} > {1, 2})               # true
        print({1, 2, 3}.issuperset({1, 2}))     # true,1>2
        print({1, 2, 3}.issubset({1, 2}))       # false,1<2
        print({1, 2, 3} >= {1, 3, 4, 5})        # false
        print({1, 2, 3} >= {1, 2, 3})           # true  互为父子


2.去重
    去重局限性: 1. 只能针对不可变类型
               2. 集合本身是无序的,去重之后无法保留原来的顺序
    2.1只能针对不可变类型:
        s1 = set([12, 'kd', 456])
        print(s1)                       # {456, 12, 'kd'}   将列表转成了集合
        print(list(s1))                 # [456, 12, 'kd']   集合转列表

    2.2集合本身是无序的,去重之后无法保留原来的顺序:
        l1 = [1, 'f', 'u', 8, 'u']
        print(set(l1))

    2.3特殊:去重依旧保持顺序:
        l2 = [
            {'name': 'lili', 'age': 18, 'sex': 'male'},
            {'name': 'jack', 'age': 73, 'sex': 'male'},
            {'name': 'tom', 'age': 20, 'sex': 'female'},
            {'name': 'lili', 'age': 18, 'sex': 'male'},
            {'name': 'lili', 'age': 18, 'sex': 'male'},
            ]
        l3 = []
        for dic in l2:
            if dic not in l3:
                l3.append(dic)
        print(l3)
                    # [{'name': 'lili', 'age': 18, 'sex': 'male'}, 
                        {'name': 'jack', 'age': 73, 'sex': 'male'}, 
                        {'name': 'tom', 'age': 20, 'sex': 'female'}]


3.长度 
    s2 = {'a', 'b', 'c'}
    print(len(s2))        # 3


4.成员运算
    print('c' in s2)      # True


5.循环
    for item in s2:
        print(item)

        2.其他内置方法(删除元素,更新update(),添加add,交集)

1.删除元素
    .discard():删除指定元素,没有则不删,
    相比.remove():删不存在元素不会报错
        s = {1, 21, 4, 5}
        s.discard(1)
        print(s3)        # {1, 4, 5}

        s.discard(3)
        print(s)         # {1, 21, 4, 5} 不会报错

        s.remove(3)
        print(s)         # 报错


2.更新集合.update()
        s4 = {1, 21, 4, 5}
        s4.update({1, 2, 3})
        print(s4)        # {1, 2, 3, 4, 21, 5}


3.添加.add
        s5 = {31, 11, 14, 15}
        s5.add(63)
        print(s5)        # {31, 11, 14, 15, 63}


4.isdisjoint()两个集合没有交集返回true
    print(s5.isdisjoint(s4))    # Ture

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值