zoukankan      html  css  js  c++  java
  • 集合

    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}
    
  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1046 Shortest Distance (20)
    1061 Dating (20)
    1041 Be Unique (20)
    1015 Reversible Primes (20)(20 分)
    pat 1027 Colors in Mars (20)
    PAT 1008 Elevator (20)
    操作系统 死锁
    Ajax的get方式传值 避免& 与= 号
    让IE浏览器支持CSS3表现
  • 原文地址:https://www.cnblogs.com/bailongcaptain/p/12481943.html
Copyright © 2011-2022 走看看