首页 > 其他 > 详细

No.6集合&内存相关

时间:2020-03-19 09:21:46      阅读:52      评论:0      收藏:0      [点我收藏+]

No.6

今日概要

  • 集合
  • 内存相关

内容回顾和补充

  • 列表

    • reverse反转

    • sort排序

      lst = [1,3,6,4,2,5]
      lst.sort()
      print(lst)      #升序
      lst.sort(reverse=True)
      print(lst)      #降序
  • 字典

    • keys/values/items

    • get

      dic = {'k1':'v1','k2':'v2'}
      
      v1 = dic['k3']          #报错
      print(v1)
      结果:报错
      v2 = dic.get('k3',666)  #返回自定义值,不写返回None
      print(v2)
      结果:666
    • pop

      dic = {'k1':'v1','k2':'v2','k3':'v3'}
      
      result = dic.pop('k2')   #pop删除的值可以查看
      print(dic,result)
      
      del dic['k3']            #del删除无法查看
      print(dic)
    • update

      dic = {'k1':'v1','k2':'v2','k3':'v3'}
      
      dic.update({'k3':'v33','k4':'v4'})   #存在则修改,不存在则添加
      print(dic)
    • 判断是否有敏感字符?

      • str

        v = 'Python全栈21期'
        
        if '全栈' in v:
            print('含敏感字符')
      • list/tuple

        lst = ['alex','oldboy','wusir']
        
        if 'wusir' in lst:
          print('含敏感字符')
      • dict

        dic = {'k1':'v1','k2':'v2','k3':'v3'}
        请判断:k1是否在其中?
        if 'k1' in dic:         #默认判断的是key
            print('存在')
        
        请判断:v2是否在其中?
        方式一
        msg = '不存在'
        if i in dic.values():
            if i == 'v2':
                msg = '存在'
        print(msg)
        方式二
        list(dic.valuse())     #强制转换成列表
        if 'v2' in list(dic.values()):
            print('存在')
        
        请判断:k3:v3是否在其中?
        value = dic.get('k3')
        if value == 'v3':
            print('存在')
        else:
            print('不存在')
      • 习题

        让用户输入任意字符串,然后判断字符串是否包列表中的含敏感字符。
        lst = ['炸弹','武器','暗杀']
        
        content = input('请输入内容:')
        msg = '不含敏感字符'
        for i in lst:
            if i in content:
                msg = '含敏感字符'
                break
        print(msg)

内容详细

1.集合

  • 无序
  • 无重复
s = {1,2,3,4,5}
#为了和空字典区分空集合表示为set()
set()
  1. 独有功能
    • add
    • discard
    • update
    • intersection
    • union
    • difference
    • symmetric_difference对称差集
  2. 公共功能
    • len
    • for
    • 索引【无】
    • 步长【无】
    • 切片【无】
    • del【无】
    • 修改【无】
  3. 嵌套问题

    列表/字典/集合 → #不能放在集合中 + 也不能作为字典的key
    
    哈希算发 → #计算机内部会将数据进行哈希算法并得到一个数值(对应内存地址),以后用于快速查找。
    
    特殊情况
    info = {1,2,3,4,True,False,'alex',None,(1,2,3)}
    print(info)
    #不会显示True,因为True和1是重复的,它们哈希值是一样。
    
    info ={1:'alex',True:'oldboy'}
    print(info)   
    结果:{1: 'oldboy'}
    #True和1重复,'oldboy'被认为是修改了'alex'

2.内存相关

  • 示例一

    #重新开辟内存并赋值,v1/v2使用的不是同一个地址
    v1 = [11,22,33]
    v2 = [11,22,33]
    
    v1 = 666
    v2 = 666
    
    v1 = 'alex'
    v2 = 'alex'
  • 示例二

    #v1被重新赋值后,其指向新数据的内存地址,原数据内存地址保留。
    #对于原数据的内存地址,解释器会将其回收处理。
    v1 = [11,22,33]
    v1 = [11,22,33,44]
  • 示例三

    #v2和v1指向同一个地址
    v1 = [11,22,33]
    v2 = v1
    练习1(内部修改)
    v1 = [666]
    v2 = v1
    v1.append(888)
    print(v2)    #含有888
    练习2(重新赋值)
    v1 = [666]
    v2 = v1
    v1 = [1,2,3] #开辟新内存并重新赋值  
    print(v2)    #结果[666]
    练习3(重新赋值)
    v1 = 'alex'
    v2 = v1
    v1 = 'oldboy'
    print(v2)   #结果'alex'
  • 示例四

    v = [1,2,3]
    values = [11,22,v]
    
    练习1
    v.append(9)
    print(values)  #结果[11,22,[1,2,3,9]]
    练习2
    valuse[2].append(9)
    print(v)       #结果[11,22,[1,2,3,9]]
    练习3
    v = [1,2,3]
    values = [11,22,v]
    v = 999
    print(values)  #结果[11,22,[1,2,3]]列表中的指向没变。
    练习4
    v = [1,2,3]
    values = [11,22,v]
    values[2] = 666
    print(v)       #结果[1,2,3]列表中弟三个元素指向变了,v的指向没变。
  • 示例五

    v1 = [1,2]
    v2 = [2,3]
    v3 = [11,22,v1,v2,v1] #第三和第四个元素的指向和v1指向都一样。
    
    v3[2] = 666           #此时v3中的第三个元素不再指向v1所指向的位置。
    print(v3)       
  • 查看内存地址

    v1 = [1,2,3]
    v2 = [1,2,3]
    print(id(v1),id(v2))  #地址不一样
    
    v1 = [1,2,3]
    v2 = v1
    print(id(v1),id(v2))  #地址一样
  • python的特殊

    v1 = 1
    v2 = 1 
    #v1和v2的指向地址本应该不同,但是对于python而言对于常见的数据为了提高性能节约空间会都使用一个地址存储。
    int: -5 ~ 256  不在此范围的数字会重新开辟
    str: 包含了非字母数字下划线的元素且乘以大于1的数会重新开辟 'alex_*'*5
  • == 和 is 有什么区别

    v1 = [1,2]
    v2 = [1,2,3]
    v1 == v2
    #False
    
    v1 = [1,2]
    v2 = [1,2,3]
    v1 is v2
    #False
    
    v1 = [1,2]
    v2 = [1,2]
    v1 == v2  
    #True
    v1 is v2  
    #False
    
    v1 = [1,2]
    v2 = v1
    v1 is v2 
    #True
    • == 用于比较值是否相等
    • is 用于比较内存地址是否相等

总结

  • 列表
    • reverse
    • sort
  • 字典
    • get ▲
    • update
  • 集合
    • add
    • discard
    • update
    • intersection
    • union
    • difference
    • symmetric_difference
  • 特殊
    • 嵌套:集合/字典的key
    • 空:None
    • 空集合:set()
    • id
    • type
    • 嵌套的应用:▲
      • 赋值
      • 修改内部元素:列表/字典/集合

No.6集合&内存相关

原文:https://www.cnblogs.com/elliottwave/p/12521786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!