zoukankan      html  css  js  c++  java
  • 基础数据类型的补充以及深浅copy

    元组
    如果元组中只有一个数据,且没有逗号,则该‘元组’与里面的数据的数据类型相同。

    tu1 = (1)
    tu2 = (1,)
    print(tu1, type(tu1))
    print(tu2, type(tu2))
    tu3 = ('alex')
    tu4 = ('alex',)
    tu5 = ([1,2,3])
    
    print(tu3, type(tu3))
    print(tu4, type(tu4))
    print(tu5, type(tu5))
    

      

    列表
    列表与列表可以相加

    l1 = [1, 2, 3]
    l2 = ['alex', 'wusir']
    l3 = l1 + l2
    print(l3)
    

      

    在循环一个列表时,最好不要对此列表进行改变大小(增删)操作

    l1 = [11, 22, 33, 44, 55, 66, 77]
    # 将列表中索引为奇数的元素全部删除
    
    # 方法一:切片+步长删除
    # del l1[1::2]
    # print(l1)
    
    
    # for i in l1:
    #     if l1.index(i) % 2 ==1:
    #         l1.pop(l1.index(i))
    # print(l1)
    
    '''
    # 在循环一个列表时,如果对列表中的某些元素进行删除,
    # 那么此元素后面的所有元素就会向前进一位,他们的索引就会发生变化。
    '''
    
    # 方法二  将元素取出来添加到新列表,再将新列表赋值到原列表
    
    l1 = [11, 22, 33, 44, 55, 66, 77]
    l2 = []
    for i in range(len(l1)):
        if i % 2 == 0:
            l2 .append(l1[i])
    print(l2)
    l1 = l2
    print(l1)
    
    
    # 方法三  倒着删除
    
    l1 = [11, 22, 33, 44, 55, 66, 77]
    for index in range(len(l1)-1, -1, -1):
        if index % 2 == 1:
            l1.pop(index)
    print(l1)
    

      

    ic = {'key1': 'value1','key2': 'value2', 'k3':'v3', 'name': 'alex'}
    
    # 将dic的键中含有k元素的所有键值对删除
    '''
    for k in dic:
        if "k" in k:
            del dic[k]
    print(dic)
    
    报错原因:dictionary changed size during iteration
    在循环一个字典中,不能改变字典的大小。
    

      

    字典面试题:创建字典的方式

    1.
    dic = {'name':'alex'}
    
    2. 
    dic = dict({'name':'alex'})
    
    3.fromkeys
    '''
    # fromkeys()
    dic1 = dict.fromkeys([1, 2, 3], 'alex')
    print(dic1)   #{1: 'alex', 2: 'alex', 3: 'alex'}
    
    # 陷阱
    dic2 = dict.fromkeys([1, 2, 3], [])
    print(dic2)   #{1: [], 2: [], 3: []}
    dic2[1].append('alex')
    print(dic2)   #{1: ['alex'], 2: ['alex'], 3: ['alex']}
    print(id(dic2[1]))   #2304578552072  对应同一地址
    print(id(dic2[2]))
    print(id(dic2[3]))
    

    数据类型的转换
    int str bool 三者转换
    str <--> bytes
    str <--> list

    dict.key() dict.values() dict.item() 都可以转换成列表

    tuple <--> list
    dic --> lsit

    # str --->lsit
    s1 = 'alex wuris taibai'
    l1 = s1.split()
    print(l1)
    # list --->str  前提此list中的元素全部都是str类型
    l1 = ['alex', 'wuris', 'taibai']
    s1 = ' '.join(l1)
    print(s1)
    
    
    # list --->tuple
    l1 = [1, 2, 3]
    tu1 = tuple(l1)
    
    # tuple ---> list
    tu2 = (1,2,4)
    l1 = list(tu2)
    print(l1)
    

      

    集合与深浅copy

    set = {'alex', 'wusir', 1, 2, 3}

    集合要求里面的元素必须是不可变的数据类型,但是集合本身是可变的数据类型。
    集合里面的元素不重复(天然去重),无序。

    主要用途:
    1.去重
    2.关系测试

    list去重*****
    l1 = [1,1,2,3,4,5,4,6,1,2,2]
    set1 = set(l1)
    l2 = list(set1)
    print(set1)
     
    # 增
    set1 = {'alex','wusir','ritian','egon','barry'}
    set1.add('景女神')
    print(set1)
     
    #update:迭代着增加
    set1.update('A')
    print(set1)
    set1.update('老师')
    print(set1)
    set1.update([1,2,3])
    print(set1)
     
    # 删
    set1 = {'alex','wusir','ritian','egon','barry'}
     
    set1.remove('alex')  # 删除一个元素
    print(set1)
     
    set1.pop()  # 随机删除一个元素
    print(set1)
     
    set1.clear()  # 清空集合
    print(set1)
     
    # del set1  # 删除集合
    # print(set1)
     
     
    # 关系测试
    # 交集
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 & set2)
    print(set1.intersection(set2))
     
    # 并集
    print(set1|set2)
    print(set1.union(set2))
     
    #反交集
    print(set1 ^set2)
    print(set1.symmetric_difference(set2))
     
    # 差集
    print(set1 - set2)
    print(set1.difference(set2))
     
    # 子集与超集
    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}
     
    print(set1 < set2)
    print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
     
    print(set2 > set1)
    print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。
     
    # 将集合变成不可变 ***
    set1 = frozenset(set1)
    print(set1)
    

    浅copy:第一层在内存中独立的,从第二层开始以及更深的层数,都使用同一个内存地址,一变都变  

    # 浅copy
    l1 = [1, 2, 3]
    l2 = l1.copy()
    print(l2)
    print(id(l1))
    print(id(l2))
    l1 = [1, 2, 3, [22,55]]
    l2 = l1.copy()
    l1[-1].append(666)
     
    print(l1)
    print(l2)
    print(id(l1)) #地址不一样
    print(id(l2))
     
    print(id(l1[-1]))  #地址一样
    print(id(l2[-1]))
    

      

    深copy:这两个是完全独立的,互不影响

    import copy
    l1 = [1, 2, 3, [22,55]]
    l2 = copy.deepcopy(l1)
    l1[-1].append(666)
     
    print(l1)
    print(l2)
    print(id(l1)) #地址不一样
    print(id(l2))
     
    print(id(l1[-1]))  #地址不一样
    print(id(l2[-1]))
     
     
    '''
    应用场景:面试会考,解释深浅copy
        完全独立的copy一份数据,与原数据没有关系,深copy
        如果一份数据(列表)第二层时,你想与原数据进行公用,浅copy
         
    面试题2:
     
    '''
    # 面试题2: 切片属于浅copy
    l1 = [1, 2, 3, [22, 33]]
    l2 = l1[:]
    # l1.append(66)
    print(l1)
    print(l2)
    # l1[-1].append(666)
    print(l2)
    

      

     

      

  • 相关阅读:
    Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
    Android Unresolved Dependencies
    Android studio 自定义打包apk名
    Android Fragment与Activity交互的几种方式
    魅族和三星Galaxy 5.0webView 问题Android Crash Report
    Android几种常见的多渠道(批量)打包方式介绍
    Android批量打包 如何一秒内打完几百个apk渠道包
    上周热点回顾(9.30-10.6)团队
    上周热点回顾(9.23-9.29)团队
    上周热点回顾(9.16-9.22)团队
  • 原文地址:https://www.cnblogs.com/eaoo/p/9455398.html
Copyright © 2011-2022 走看看