• 基础数据类型之集合和深浅copy,还有一些数据类型补充


                          集合

    集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

      去重,把一个列表变成集合,就自动去重了。

      关系测试,测试两组数据之前的交集、差集、并集等关系。

    #关于集合和波尔值之间的苟苟且且
    # set ={1,2,3,4,5,True,(1,2,3),} #集合具有自动去重和去空格功能
    # set.add(False)
    # set.add(True) #打印结果显示,没有Teue,应该是集合内部的数字和元组不是空是True,去重就把True去掉了
    # print(set)

    # set.update(False) #update是随机迭代增加,布尔值不是迭代对象,所以只能用add增加
    # print(set)
    # set.update(True)
    # print(set)

    #删除
    # set = {1,2,3,4,5,(789),6}
    # set.pop() #随机删除,有返回值
    # print(set)

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

    #并集 并集也可以去两个集合的重
    # set = {1,2,3,4}
    # set2 = {3,4,5,6,7,8}
    # print(set.union(set2))
    # print(set|set2)

    #差集
    # set = {1,2,3,4,5}
    # set3 = {4,5,6,7}
    # print(set.difference(set3))
    # print(set - set3)

    #反交集 #两个集合相同的去掉
    # set = {1,2,3,4,5}
    # set4 = {4,5,6,7,8}
    # print(set.symmetric_difference(set4))
    # print(set ^ set4)

    #超集 子集
    # set = {1,2,3,4}
    # set5 = {1,2,3,4,5,6,7}
    # print(set5.issuperset(set)) #判断set5是不是set的爸爸,返回波尔值
    # print(set.issubset(set5)) #判断set是不是set5的儿子,返回波尔值
    # print(set5 > set)
    # print(set < set5)

    #把集合冻住,使其成为不可变数据类型
    # set = {1,2,3,4,5,6}
    # print(frozenset(set))

    深浅copy

    浅copy  通过赋值之后,两个值内存地址不同,在数据有嵌套的情况下,嵌套部分内存地址相同,无论嵌套多少层都一样

    深copy必须调用copy模块才能使用  import copy    deepcopy     深copy就是通过赋值之后,值得内存地址完全不同,无论嵌套多少层都一样

    基础数据类型补充

    现在我莫名其妙有一个需求dic = {'k1':'v1','k2':'v2','a3':'v3'},我现在看着字典不顺眼,准备收拾它,就想着把它的带元素k的键删掉怎么办

    按照正常思路来一下,这个字典有多大咱们不知道,也许里面储存了上亿的带k大军,所以我用循环删

    dic = {'k1':'v1','k2':'v2','a3':'v3'}

    for i in dic:

      if 'k' in i:

        del dic[i]

    print(dic)

    结果报错,说是字典长度改变了。。。我觉得废话,我要删除长度肯定改变啊,总之不让删咋整。。。

    然后,我踩在前人的肩膀上抄了这样一份代码解决了问题

    # dic = {'k1':'v1','k2':'v2','a3':'v3'}
    # l = []
    # for i in dic:
    # if 'k' in i:
    # l.append(i)
    # for i in l: #关键在这里和下面,执行的是循环列表,但是删除的是字典,无耻啊
    # del dic[i] #现在字典可以删除,因为现在不是边循环字典边删除,而是先判断出字典的带k大军放到列表里,循环列表就相当于循环字典带k大军,此时字典的带k大军就被删除了
    # print(dic)
    然后我又抄了第二份。。。
    # dic = {'k1':'v1','k2':'v2','a3':'v3'}
    # dic1 = {}
    # for i in dic.keys():
    # if 'k' not in i:
    # dic1.setdefault(i,dic[i])
    # dic = dic1
    # print(dic)


    经过我一些神神叨叨的实验,得出以下结论

    列表
    当循环列表时,如果在循环中删除某个或者某些元素,列表元素个数改变,索引改变,容易出错。
    列表这个在循环删除的时候可以从后往前删除,这样前面的索引不会变化,至于后面的那就无所谓了,后面改变也不影响循环

    字典
    当循环字典时,如果在循环中删除某个或者某些键值对,字典的键值对个数改变,长度改变,容易出错。

     

  • 相关阅读:
    基于WINCE6.0+S3C2443的camera驱动
    WINCE下基于SL031的RFID功能的实现
    WINCE6.0+S3C2443下的activesync问题
    WINCE6.0+S3C2443下WatchDog学习
    错误的抉择,痛悔
    WINCE5.0下SQL server compact版本更新
    做生意和打工的区别
    WINCE基于MC8630的3G模块的控制和加载
    Xml Tips
    VB.NET and C# Comparison
  • 原文地址:https://www.cnblogs.com/ddjl/p/8086915.html
Copyright © 2020-2023  润新知