集合

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

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

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

  1. #关于集合和波尔值之间的苟苟且且
    # set ={1,2,3,4,5,True,(1,2,3),} #集合具有自动去重和去空格功能
    # set.add(False)
    # set.add(True) #打印结果显示,没有Teue,应该是集合内部的数字和元组不是空是True,去重就把True去掉了
    # print(set)
  2.  
  3. # set.update(False) #update是随机迭代增加,布尔值不是迭代对象,所以只能用add增加
    # print(set)
    # set.update(True)
    # print(set)
  4.  
  5. #删除
    # set = {1,2,3,4,5,(789),6}
    # set.pop() #随机删除,有返回值
    # print(set)
  6.  
  7. #交集
    # set = {1,2,3,4}
    # set1 = {3,4,5,6,7}
    # print(set.intersection(set1))
    # print(set&set1)
  8.  
  9. #并集 并集也可以去两个集合的重
    # set = {1,2,3,4}
    # set2 = {3,4,5,6,7,8}
    # print(set.union(set2))
    # print(set|set2)
  10.  
  11. #差集
    # set = {1,2,3,4,5}
    # set3 = {4,5,6,7}
    # print(set.difference(set3))
    # print(set - set3)
  12.  
  13. #反交集 #两个集合相同的去掉
    # set = {1,2,3,4,5}
    # set4 = {4,5,6,7,8}
    # print(set.symmetric_difference(set4))
    # print(set ^ set4)
  14.  
  15. #超集 子集
    # 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)
  16.  
  17. #把集合冻住,使其成为不可变数据类型
    # 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)

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

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

  1. # 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)
    然后我又抄了第二份。。。
  1. # 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)
  2.  
  3. 经过我一些神神叨叨的实验,得出以下结论
  1. 列表
    当循环列表时,如果在循环中删除某个或者某些元素,列表元素个数改变,索引改变,容易出错。
    列表这个在循环删除的时候可以从后往前删除,这样前面的索引不会变化,至于后面的那就无所谓了,后面改变也不影响循环
  2.  
  3. 字典
    当循环字典时,如果在循环中删除某个或者某些键值对,字典的键值对个数改变,长度改变,容易出错。

基础数据类型之集合和深浅copy,还有一些数据类型补充的更多相关文章

  1. 07、python的基础-->数据类型、集合、深浅copy

    一.数据类型 1.列表 lis = [11, 22, 33, 44, 55] for i in range(len(lis)): print(i) # i = 0 i = 1 i = 2 del li ...

  2. python-基础数据类型,集合及深浅copy

    一 数据类型定义及分类 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区 ...

  3. day 07 数据类型,集合,深浅copy

    1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...

  4. Python学习之路基础篇--07Python基础+编码、集合 和 深浅Copy

    1 小数据池(节省内存) 只有数字和字符串中内存,储存在同一个内存地址中 数字的范围在-5~256中,字符串有以下两个特点:不能含有特殊字符,还有就s*20 不是同一个地址,而要*21就不是了 2 编 ...

  5. 基础数据类型的坑和集合及深浅copy

    一.基础数据类型的坑: 元组: 如果一个元组中,只有一个元素,且没有逗号,则该"元组"与里面的数据的类型相同. # 只有一个数据,且没有逗号的情况: print(tu1,type( ...

  6. python 的基础 学习 第八天数据类型的补充 ,集合和深浅copy

    1,数据类型的补充: 元组()tuple,如果只有元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('rwr') print(tu,type(tu)) tu = ('r ...

  7. python之数据类型补充、集合、深浅copy

    一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...

  8. python学习笔记三 深浅copy,扩展数据类型(基础篇)

    深浅copy以及赋值 对于字符串和数字而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy n1 = #n1 = 'hahahaha' #赋值n2 = n1#浅co ...

  9. 数据结构中的列表、元组、字典、集合 ,深浅copy

    数据结构:数据结构是计算机存储数据和组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.在python中主要的数据类型统称为容器. 而序列(如列表.元组).映射(如字典).集合 ...

随机推荐

  1. gitk、Git GUI 图形化工具中文显示乱码的解决方案

    在Windows下使用gitk.Git-Gui时,可能会出现代码中的中文乱码的情况.解决方法:在软件的安装目录下,在Git\mingw64\etc\gitconfig文件末尾添加: [gui]enco ...

  2. tomcat配置加密的连接器https

    对称加密:加密和解密用的是同样的密钥. 非对称加密:使用一对密钥,公钥和私钥,私钥只由一方保管,不能外泄:公钥可以发给任何请求它的人 那么得到公钥的一方怎么确定这个公钥是服务器发过来的呢? 这个就需要 ...

  3. (转载)深入理解Java:内省(Introspector)

    本文转载自:https://www.cnblogs.com/peida/archive/2013/06/03/3090842.html 一些概念: 内省(Introspector) 是Java 语言对 ...

  4. (三)C语言之变量

  5. node版本如何升级

    爬坑后的结论:window系统升级node只能到node官网下载window安装包来覆盖之前的node. 以下为我的爬坑之路: 今天安装了vue cli 3,使用命令时报: You are using ...

  6. 使用redis时遇到的问题及解决方法

    最近在向redis中写入数据的时候,报了下面的错误: failed opening the rdb file crontab (in server root dir /etc) for saving ...

  7. ubuntu关于ssh协议登录问题

    说明 初始化系统默认不安装ssh如果你想要通过crt等工具连接,你需要手动安装ssh 1.安装ssh工具 使用ubuntu安装的命令sudo apt-get install openssh-serve ...

  8. [SQL Server 视图的创建- (create view必须是批处理中仅有的语句问题)]

    当我们SQL Server在创建视图时 ,会出现"create view 必须是批处理中仅有的语句"这个语法错误提示 ,实际上这本身没什么错! 因为create view 必须是批 ...

  9. invalid new-expression of abstract class type 'CurveFittingEdge'

    目录 一 报错原因 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 报错原因 今天遇到了一个之前从未遇到的报错: error: invalid new-expression of abstr ...

  10. AndroidManifest.xml中的<uses-feature>以及和<uses-permission>之间的联系

    概述:<uses-feature>用来声明应用中需要用的硬件和软件的功能. 硬件特性:表明您的应用需要用的硬件功能. 功能类型 特征描述 描述 音频 android.hardware.au ...