zoukankan      html  css  js  c++  java
  • py07.2_数据类型(集合)

    一、集合类型

    1.基本使用

    (1)用途:关系运算、去重

    (2)定义方式:{}内用逗号分开多个元素,每一个元素都必须是不可变(即可hash)类型

    ⭐⭐⭐强调:

    a.集合内的元素都必须是不可变(即可hash)类型

    b.集合内的元素是无序的,并不能通过索引来取值

    c.集合内的元素不能重复(可理解为集合内无重复的元素)

    s={1,3,"hello","sun"}     #s=set({1,3,"hello","sun"})
    print(type(s))

    2.单纯的用集合去重,需要注意的问题是⭐⭐⭐

    (1)去重的目标所包含的值必须都是为不可变类型

    (2)去重的结果会打乱原来的顺序

    (如:列表若不想打乱顺序,可以使用for循环+append的方法来把值从列表中取出,并放入新的列表中)

    names=["Namy","Brooke","Sauro","Luffy","Luffy","Brooke"]
    s=set(names)
    names=list(s)
    print(names)
    
    #如列表的去重
    l=["sun","sun","cake","hello","sunday","hello"]
    new_l=[]                                      #新建空列表
    for item in list:                              
        if item not in new_l:
            new_l.append(item)

    3.常用操作和内置方法

    3.1优先掌握的操作

    3.1.1 长度len

    print(len(names))

    3.1.2 成员运算in和not in

    names=("Luffy","Brooke")
    print("Luffy" in names)

    ⭐⭐⭐重点:

    ① 当没有集合的时候,取出两个列表中都有的或者不同元素的方法

    names1=["Luffy","Namy","Brooke","Sauro","Boss","Boost"]
    names2=["Luffy","Brooke","Boss","Sun","Moon"]
    list=[]                      #定义一个空列表
    for name in names1:    #循环取出names1中的元素    #如果需要不同元素则直接用not in
        if name in names2:     #判断names2中是否有同样的元素
            list.append(name)       #有的话就把该元素加入新列表当中
    print(list)

    ② 有集合之后的操作方法:

    names1={"Luffy","Namy","Brooke","Sauro","Boss","Boost"}
    names2={"Luffy","Brooke","Boss","Sun","Moon"}
    
       | 并集   #前后顺序改变没有任何影响
    print(names1|names2)
    print(names1.union(names2))
    
       & 交集   #前后顺序改变没有任何影响
    print(names1&names2)
    print(names1.intersection(names2))
    
       -  差集    #前后位置对调,结果不同
    print(names1-names2)
    print(names2-names1)
    print(names1.difference(names2))
    print(names2.difference(names1))
    
       ^ 对称差集  #前后顺序改变不会改变结果
    print(names1^names2)
    print(names2^names1)
    print(names1.symmetric_difference(names2))
    
      ==
    print(names1==names2)   #False
    
      >,>=   父集
    print(names1>names2)   #False  (names1包含names2)
    print(names1.issuperset(names2))
    
       <,<=  子集(被包含的关系)
    print(names2<names1)   #True

    4.该类型总结

    (1)存一个值或者多个值

            可以存多个值,但是值必须都是不可变类型

    (2)有序或者无序

             集合是无序的

    (3)可变或者不可变

            set集合是可变类型

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

    5.集合的去重

    ⭐⭐⭐单纯的用集合去重,需要注意的问题是

    (1)去重的目标所包含的值必须都是不可变类型

    (2)去重的结果会打乱原来的顺序

    stu_info=[
    {'name':'namy','age':18,'sex':'female'},
    {'name':'luffy','age':18,'sex':'male'},
    {'name':'luffy','age':18,'sex':'male'},
    {'name':'brooke','age':999,'sex':'male'},
    {'name':'brooke','age':999,'sex':'female'},
    ]
    
    new_list=[]
    
    for info in stu_info:
    
         if info not in new_list:
    
             new_info.append(info)
    
    print(new_info)
    
     
  • 相关阅读:
    欧几里得算法
    匈牙利算法找二分图最大匹配
    hdu3374 String Problem(最小值表示法 + KMP)
    hdu6704 K-th occurrence(后缀数组+RMQ+主席树)
    洛谷 P3809 【模板】后缀排序
    hdu2222 【AC自动机】Keywords Search
    2019杭电多校十 1011 Make Rounddog Happy(rmq + 分治)
    Separate String(Ac自动机+dp)
    2019杭电多校二 I Love Palindrome String(回文自动机)
    HDU2451 Simple Addition expression(数位dp/找规律)
  • 原文地址:https://www.cnblogs.com/Smart1san/p/9123285.html
Copyright © 2011-2022 走看看