• 集合


    1.集合的作用

    集合的作用就是更好的存取数据。

    2.集合的关系运算
    friends1 = ["zero","kevin","jason","egon"]
    friends2 = ["Jy","ricky","jason","egon"]
    #取交集:两者共同的好友
    l=[]
    for x in friends1:
        if x in friends2:
            l.append(x)
    print(l)
    #效果等同于
    res=friends1 & friends2
    print(res)
    
    3.定义
    在{}内用逗号分隔开多个元素,多个元素满足以下三个条件
    
    1. 集合内元素必须为不可变类型
    2. 集合内元素无序
    3. 集合内元素没有重复
    4. ps: s={} # 默认是空字典 s=set()#可以定义空集合

    4.类型转换

    1.字符串转化集合

    res=set('hellolllll')
    print(res)
    #{'l', 'e', 'o', 'h'}
    #ps:集合可去除重复,且有无序性。
    

    2.字典转化集合

    print(set({'k1':1,'k2':2}))
    #{'k1', 'k2'}
    #ps:字典只取key
    

    3.列表转化集合

    print(set([1,2,3,4,5,6])) #{1, 2, 3, 4, 5, 6}
    print(set([1,1,1,1,1,1,[11,222]]) # 报错
    ps:集合内不可以包含可变类型
    

    5.内置方法

    1.取交集

    friends1 = {"zero","kevin","jason","egon"}
    friends2 = {"Jy","ricky","jason","egon"}
    res=friends1 & friends2
    print(res)
    #{'jason', 'egon'}
    
    print(friends1.intersection(friends2)) #intersection效果类似与&
    

    2.取并集/合集:两者所有的好友

    friends1 = {"zero","kevin","jason","egon"}
    friends2 = {"Jy","ricky","jason","egon"}
    print(friends1 | friends2)
    print(friends1.union(friends2))
    #{'kevin', 'egon', 'Jy', 'zero', 'jason', 'ricky'}
    #两种方法都可以
    

    3.取差集:取friends1独有的好友

    friends1 = {"zero","kevin","jason","egon"}
    friends2 = {"Jy","ricky","jason","egon"}
    print(friends1 - friends2)
    print(friends1.difference(friends2))
    #{'kevin', 'zero'} 
    #两种方法都可以
    

    4.对称差集: 求两个用户独有的好友们(即去掉共有的好友)

    friends1 = {"zero","kevin","jason","egon"}
    friends2 = {"Jy","ricky","jason","egon"}
    print(friends1 ^ friends2)
    print(friends1.symmetric_difference(friends2))
    #{'Jy', 'kevin', 'ricky', 'zero'}
    

    5.父子集:包含的关系

    s1={1,2,3}
    s2={1,2,4}
    # 不存在包含关系,下面比较均为False
    print(s1 > s2)
    print(s1 < s2)
    
    s1={1,2,3}
    s2={1,2}
    print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2他爹 True
    print(s1.issuperset(s2))  # 判断s2是否是s1的爹 True
    print(s2.issubset(s1)) # 判断s2是否是s1的儿 True
    

    互为父子集

    s1={1,2,3}
    s2={1,2,3}
    print(s1 == s2) # s1与s2互为父子
    print(s1.issuperset(s2))
    print(s2.issuperset(s1))
    # True
    # True
    # True
    

    6.去重

    1.只能针对不可变类型去重

    print(set([1,1,1,1,2])) # {1, 2}
    

    2.无法保证原来的顺序

    l=[1,'a','b','z',1,1,1,2]
    l=list(set(l))
    print(l)
    # 顺序随机
    

    3.列表的去重操作

    l=[
        {'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'},
    ]
    new_l=[]
    for dic in l:
        if dic not in new_l:
            new_l.append(dic)
    print(new_l)
    #[{'name': 'lili', 'age': 18, 'sex': 'male'}, {'name': 'jack', 'age': 73, 'sex': 'male'}, {'name': 'tom', 'age': 20, 'sex': 'female'}]
    

    7.其他通用操作

    1.长度

    >>> s={'a','b','c'}
    >>> len(s) # 3
    

    2.成员运算

    >>> s={'a','b','c'}
    >>> 'c' in s
    True
    

    3.循环

    s={'a','b','c'}
    for item in s:
        print(item)
    

    8.需要掌握的内置方法

    1.discard

    s={1,2,3}
    s.discard(4) # 删除元素不存在do nothing(兼容性好)
    print(s)
    # s.remove(4) # 删除元素不存在则报错
    

    2.update

    s={1,2,3}
    s.update({1,3,5})
    print(s)
    #{1, 2, 3, 5}
    

    3.pop

    s={1,2,3}
    res=s.pop()
    print(res)
    #1
    

    4.add

    s={1,2,3}
    s.add(4)
    print(s)
    #{1, 2, 3, 4}
    

    9.其余了解性方法

    1.isdisjoint()

    s={1,2}
    res=s.isdisjoint({3,4,5,6}) # 判断两个集合是否独立、有没有共同部分,返回布尔值
    print(res) #True
    

    2.difference_update()

    s={1,2,3}
    s.difference_update({3,4,5}) # 返回对象中没有的值(集合的形式)
    print(s) # {1, 2}
    
  • 相关阅读:
    解决:The content of element type "web-app" must match "(icon?display
    [转]实体类与数据库字段不匹配问题,java.sql.SQLSyntaxErrorException: Unknown column 'xxx' in 'field list'
    IDEA中导入其它由Maven管理的java web项目并运行,提示“Error:(3, 38) java: 程序包org.springframework.stereotype不存在”问题的解决
    动态规划题目汇总
    数组题目汇总
    c++11 push_back与emplace_back之间的区别
    字符串题目汇总
    链表题目汇总
    C++ stringstream与getline()
    二叉树题目汇总
  • 原文地址:https://www.cnblogs.com/bailongcaptain/p/12481943.html
Copyright © 2020-2023  润新知