zoukankan      html  css  js  c++  java
  • 初识基础数据类型 dict,set

    字典

    ​ 字典(dict)是python中唯一一个映射类型,在python中key是唯一的,在保存的时候,根据key计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为hash算法.所以,在dict中存储的键值对中的key必须是可哈希的.(可以改变的都是不可哈希的,那么可哈希的就意味着不可变.)这是为了能准确地计算内存地址而规定的.还有,dict保存的数据不是按照我们添加进去的顺序保存的,是按照hash表的顺序保存的,而hash表不是连续的,所以不能进行切片工作,只能通过key来获取dict中的数据.

    • 已知的可哈希(不可变)的数据类型:int,bool,str,tuple;不可哈希(可变)的数据类型:list,dict,set
      • 顺便回忆:可迭代的数据类型:除了int和bool,其他都可迭代
    • ​ 字典名[键] = 值 无则添加,有则修改

      ​ 字典名.setdefault(键,值): 无则添加,有则不添加

    • ​ 字典名.pop(键) 通过键进行删除.原地删除,返回的也是被删除的值

      ​ 字典名.popitem() 随机删除 python3.6默认删除最后一个,返回值是被删除的键值对

      ​ 字典名.clear() 清空

      ​ del 字典名 删除整个容器

      ​ del 字典名[键] 通过键进行删除

      ​ 字典中没有remove

    • ​ 字典名[键] = 值 无则添加,有则修改

      ​ 字典名.update(新字典名) 当新字典中没有源字典的键值对时就添加到源字典中,有就修改

    • ​ 字典名.get(键) 查询不到返回None

      ​ 字典名.get(键,自定内容) 查询不到返回自定内容

      ​ 字典名.setdefault(键,自定内容) 查询不到返回自定内容,没有自定内容返回None

      ​ 字典名[键] 查询不到报错

    for i in dic:		# 查看所有的键
     print(i)
     
    for i in dic:		# 查看所有的值
     print(dic.get(i))
     
    print(dic.keys())		# 获取到的是一个高仿列表
    print(dic.values())		# 高仿列表支持迭代,不支持索引
    print(dic.items())		# 这个高仿列表存放的是多个元组,元组中第一个元素是键,第二个元素是值
    
    • 其他方法:

      dic = {}
      dic.fromkeys("abc",[])   # 批量创建键值对 "a":[],"b":[],"c":[]
      print(dic)		# {}
      dic1 = dic.fromkeys("abc",[])
      print(dic1)		# {'a': [], 'b': [], 'c': []}
      # fromkeys 第一个人参数必须是可迭代对象,会将可迭代对象进行迭代,成为字典的键,另一个参数是值(这个值是共用的);共用的值是可变数据类型就会有坑,不可变数据类型就没事
      
    • 解构

      ​ 解构可以将内容分别赋值到变量中.

      a,b = b,a   一行代码进行数值交换
      
      a,b = 1,2
      print(a,b)		# 1 2
      
      a,b = ('汪峰':'北京','王菲':'天后')
      print(a,b)		# 汪峰 王菲
      
      for k,v in dic.items():
          print('这是键:',k)
          print('这是值:',v)
          
      dic = {"key1":2,"key2":4}
      for i in dic.items():
          a,b = i  # 自己写的解构
          print(a)
          print(b)
         
      for a,b in dic.items():
          print(a)
          print(b)
      

    集合

    ​ 集合set 是一个没有值的字典.因为集合的元素要求是不可变且唯一,我们就利用它的唯一来做去重

    ​ 集合是无序,可变的数据类型

    • s = set()
      s.add("alex")
      print(s.add("alex"))   # None
      
      s.update("wusir")       # 迭代添加
      print(s.update("wusir"))	# None
      print(s)
      
      set("wusir")  # 迭代添加
      print(s)
      
    • s = {100,0.1,0.5,1,2,23,5,4}
      s.remove(4)    # 通过元素删除
      print(s)
      s.clear()  # 清空
      s.pop()      # 随机删除 (最小的)
      print(s)
      
    • 改:先删再加

    • 查:for循环

    • 其他操作

      # 其他操作:
      s = {1,23,9,4,5,7}
      s1 = {1,2,3,4,5}
      
      # 差集 -
      print(s - s1)  # {9, 23, 7}
      print(s1 - s)  # {2,3}
      
      # 交集  &
      print(s & s1)  # {1,4,5}
      
      # 并集  |(管道符)
      print(s | s1)  # {1,2,3,23,4,5,9,7}
      
      # 反交集  shift + 6 ==  ^
      print(s ^ s1)   # {2,3,23,9,7}
      
      s = {1,23,9,4,5,7}
      s1 = {1,4,5}
      
      # 子集  返回的一个布尔值
      print(s > s1)  # True
      
      # 父集(超集)
      print(s1 < s)  # True
      
      print(frozenset({1,23,4,5}))   # 冻结集合
      
  • 相关阅读:
    「疫期集训day7」周期
    「字符串」哈希板子
    「疫期集训day6」雨林
    「疫期集训day5」火焰
    「数据结构」对顶堆
    「STL中的常用函数 容器」
    「单调队列优化DP」P2034 选择数字
    bootstrap table使用及遇到的问题
    ArcGIS栅格影像怎么从WGS84地理坐标转成Xian80投影坐标
    arcgis如何求两个栅格数据集的差集
  • 原文地址:https://www.cnblogs.com/richard_A/p/11565049.html
Copyright © 2011-2022 走看看