• python--知识小结和集合


    知识小结

    一、

    = 表示赋值
    ==表示比较值的大小
    is 比较内存地址

    二、

    数字小数据池:在-5~256之内,id在电脑里是一样的
    字符串id一样要求:
    ①:不能有特殊字符
    ②:s(一个单字符)*20以内的数字,id是一样的,乘以20以后的数字则id不一样了
    剩余的如dict, list ,元祖,tuple,set 没有小数据池

    三、

    各个编码之间的二进制不能相互转换,会产生乱码
    文件的存储,传输,不能用unicode,只能用utf-8  gbk   ascii utf-16

    四、

    bytes的类型,都是在py3的大环境中
    对英文:str:  表现形式:a='alex'                      
                 中文:表现形式:a=b'alex'        
                                     编码形式:utf-8   gbk
    对中文:str:  表现形式:a='中国'       
                                     编码形式:unicode
                 中文:表现形式:a=b'xe23e24e25e26e27e28'     三个字节表示一个中文
                                     编码形式:utf-8   gbk

    例子:

    encode   编码  str---->bytes
    s1='alex'
    s11=s1.encode(utf-8)
    print(sii)
    输出:b'alex'

    五、集合

    集合是可变数据类型,元素无序,去重的。但是集合里面的元素必须是不可变的数据类型。

    1:集合的创建,两种方式

    set1 = set({1,2,'barry'})
       set2={'1','2','barry'}

    2:集合的增:

    add,直接添加
    set={'1','2','barry'}
    set.add('66')
    print(set)       #{1, 2, 'barry', '66'}
    
    update   迭代添加,会自动去除重复
    
    set.update('66')            #{1, 2, 'barry', '6'}

    3:集合的删:

    set= set({1,2,'barry'})
    1.pop
    set.pop()   随机删除,有返回值
    2.remove
    set.remove(‘1’)  删除元素   # {2,'barry'}
    3.clear()
    set.clear() #清空集合
    4.del
    del set   删除集合 

    3:集合没有改,因为集合里的元素是不可变数据类型

    4:集合的查:

    set1 = set({1,2,'barry'})
    for i  in  set1:
         print(i)

    5.两个集合的操作

    5.1 交集。(&  或者 intersection)

    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    1:&
    set3=set1&set2
    print(set3)     #{4, 5}
    2:intersection
    set3=set1.intersection(set2)     #{4, 5}
    交集

    5.2 并集。(| 或者 union)

    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    set3=set1|set2
    print(set3)    #{1, 2, 3, 4, 5, 6, 7, 8}
    set3=set1.union(set2)
    print(set3)    #{1, 2, 3, 4, 5, 6, 7, 8}
    并集

    5.3 反交集。

     (^ 或者 symmetric_difference)
    1:^
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1^set2)        #{1, 2, 3, 6, 7, 8}
    2:symmetric_difference
    print(set1.symmetric_difference(set2))     #{1, 2, 3, 6, 7, 8}
    反集合

    5.4 子集与超集。

    1.子集
    set1 = {1,2,3,4,5}
    set2 = {1,2,3,4,5,6}
    print(set1<set2)     #true      set1是set2    子集
    
    2.超集
    print(set2>set1)    #true        set2是set2超集
    子集与超集
    冻结的set:frozenset

    5.5差集。(- 或者 difference)

    1.-
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1-set2)   #{1, 2, 3}
    print(set2-set1)    #{8, 6, 7}
    2:difference 
    print(set1.difference(set2))      #{1, 2, 3}
    print(set2.difference(set1))      #{8, 6, 7}
    差集

    六、浅copy

    6.1赋值运算:对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

    总结:l1=l2 不管怎么变化都是同时变,保持一致。
    l1 = [1,2,3,['barry','alex']]
    l2 = l1    #赋值后 l1和l2是一样的
    print(l1,l2)   # 值一样   [1, 2, 3, ['barry', 'alex']] 
                                      [1, 2, 3, ['barry', 'alex']]
    print(id(l1),id(l2))     # id一样    28808496    28808496  
    #l1进行修改后再打印
    l1[0] = 111
    print(l1,id(l1),l2,id(l2))   #l1和l2同时变化,并且id也是同时变化的
                                      # [111, 2, 3, ['barry', 'alex']] 28808496 
                                         [111, 2, 3, ['barry', 'alex']] 28808496
    l1[3][0]='云哥'   #改变嵌套的内容,l1=l2仍然同时变,保持一致。
    print(l1,id(l1),l2,id(l2))    
                                           #[111, 2, 3, ['云哥', 'alex']] 28939568
                                              [111, 2, 3, ['云哥', 'alex']] 28939568
    赋值运算 

    6.2浅拷贝copy。

    对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

    l1 = [1,2,3,['barry','alex']]
    l2=l1.copy()     #l1与l2地址不一样
    print(l2,id(l2),l1,id(l1))    #l2:[1, 2, 3, ['barry', 'alex']] 7821432
                                         #l1: [1, 2, 3, ['barry', 'alex']] 7836976
    
    l2.append('4')                    #总结:l2改变第一层变化,不影响l1
    print(l2,id(l2),l1,id(l1))  #l2:[1, 2, 3, '4', ['barry', 'alex']] 28661880
                                       # l1:[1, 2, 3, ['barry', 'alex']] 28677424
    
    l2[3][0]='云哥'                #总结:l2改变第二层(被嵌套的不分)变化,l1进行同步变化
    print(l2,id(l2),l1,id(l1))    #l2:[1, 2, 3, ['云哥', 'alex']] 28792952
                                         # l1:[1, 2, 3, ['云哥', 'alex']] 28808496
    浅copy

    6.3,深拷贝deepcopy     

    对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

    import copy
    l1 = [1,2,3,['barry','alex']]
    l2 = copy.deepcopy(l1)
    
    print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2915377167816
    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048
    
    l1[1] = 222
    print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2915377167816
    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048
    
    l1[3][0] = 'wusir'
    print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2915377167240
    print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2915377167304     
    deepcope
  • 相关阅读:
    技术出身的创业者管理销售团队的七条成功秘笈
    修改MVC的默认T5 template
    Balsamiq Mockups——界面原型设计软件
    在eclipse中安装pydev插件
    torch.nn.Embedding Learner
    七种交叉验证及其代码 Learner
    Noise Contrastive Estimation 前世今生——从 NCE 到 InfoNCE Learner
    论文解读(GraRep)《GraRep: Learning Graph Representations with Global Structural Information》 Learner
    邻接矩阵、度矩阵 Learner
    可逆矩阵与奇异矩阵 Learner
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/8082068.html
Copyright © 2020-2023  润新知