zoukankan      html  css  js  c++  java
  • python--基础数据类型 set集合

    一.set集合

      set集合是python的一个基本数据类型,一般不是很常用.set中的元素是不重复的.无序的.里面的元素必须是可hash的(int, str, tuple, bool)

      注意: 

          set集合中的元素必须是可hash的,但是set本身是不可hash的.set是可变的

          set中的元素是不重复的且无序的

    使用上面的特性,我们可以用set来去重复

    给list去重复
    
    lst = [1,1,2,3,4,5,2,3,4]
    print(list(set(lst)))  # 把list转换成set 再转换回list
    
    # [1, 2, 3, 4, 5]

    二.集合的增删改查

      1.增加   .add() . update()  

    s = {"刘嘉玲", '关之琳', "王祖贤"}
    s.add("郑裕玲")
    print(s)
    
    s.add("郑裕玲") # 重复的内容不会被添加到set集合中
    print(s)
    
    s = {"刘嘉玲", '关之琳', "王祖贤"}
    s.update("麻花藤") # 迭代更新
    print(s)
    
    s.update(["张曼玉", "李若彤","李若彤"])
    print(s)

      2.删除  .pop()  .remove()  .clear()

    s = {"刘嘉玲", '关之琳', "王祖贤","张曼玉", "李若彤"}
    item = s.pop() # 随机弹出一个.
    print(s)
    print(item)
    
    s.remove(
    "关之琳") # 直接删除元素
    print(s)
    s.clear()
    # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和 dict区分的. print(s) # set() # s.remove("马虎疼") # 不存在这个元素. 删除会报错

      3.修改

    # set集合中的数据没有索引. 也没有办法去定位一个元素. 所以没有办法进行直接修改.
    # 我们可以采用先删除后添加的方式来完成修改操作
    s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
    # 把刘嘉玲改成赵本山
    s.remove("刘嘉玲")
    s.add("赵本⼭")
    print(s)

      4.查询

    # set是一个可迭代对象. 所以可以进行for循环
    for el in s:
      print(el)

    三.其他的常用操作

      set集合本身是可以发生改变的. 是不可hash的. 我们可以使用frozenset来保存数据. frozenset是不可变的. 也就是一个可哈希的数据类型

    frozenset

    是不可变的, 也就是一个可哈希的数据类型

    s = frozenset(["a", "b", "c", "d"])
    dic = {s:'123'} # 可以正常使用了
    print(dic)
    
    #{frozenset({'c', 'd', 'b', 'a'}): '123'}

    集合中的操作

    s1 = {"a", "b", "c"}
    s2 = {"d", "e", "a"}

    1.交集 两个集合中共有的元素

    print(s1&s2)  # {'a'}
    print(s1.intersection(s2))  # {'a'}

    2.并集 

    print(s1|s2)  # {'a', 'c', 'b', 'd', 'e'}
    print(s1.union(s2))  # {'a', 'c', 'b', 'd', 'e'}

    3.差集 得到第一个中单独存在的

    print(s1 - s2)  # {'c', 'b'}
    print(s1.difference(s2))  # {'c', 'b'}

    4.反交集 两个集合中单独存在的数据

    print(s1 ^ s2)  #{'c', 'd', 'b', 'e'}
    print(s1.symmetric_difference(s2))  # {'c', 'd', 'b', 'e'}

    5.子集

    print(s1 < s2)  # False  判断set1是否为set2的子集
    print(s1.issubset(s2))  #False

    6.超集

    print(s1 > s2)  # False  判断set1是否为set2的超集
    print(s1.issuperset(s2))  # False
  • 相关阅读:
    【Linux】Vim编辑器-批量注释与反注释
    java_部署jar
    linux_UBUNTU 12.04 上使用 SQUID 架设HTTP正向代理服务器
    crawler_java应用集锦9:httpclient4.2.2的几个常用方法,登录之后访问页面问题,下载文件_设置代理
    linux_coom _ Linux文件比较,文本文件的交集、差集与求差
    linux_之sed用法
    算法-跑道与马-百度面试题
    《Python》常用内置模块
    《Python》内置方法进阶和常用模块
    《Python》反射、内置方法(__str__,__repr__)
  • 原文地址:https://www.cnblogs.com/robertx/p/10350267.html
Copyright © 2011-2022 走看看