博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础数据类型之集合和深浅copy,还有一些数据类型补充
阅读量:6083 次
发布时间:2019-06-20

本文共 2314 字,大约阅读时间需要 7 分钟。

                      集合

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

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

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

 

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

 

 

 

转载于:https://www.cnblogs.com/ddjl/p/8086915.html

你可能感兴趣的文章
EBS FORM 失效工具栏按钮
查看>>
com.sun.jdi.InvocationException occurred invoking method
查看>>
Windows Server 2008 R2 IIS7 搭建PHP环境
查看>>
任务计划
查看>>
交换机杂记
查看>>
shell编程总结
查看>>
我的友情链接
查看>>
Java内存与垃圾回收调优
查看>>
Java 8新特性:Stream API
查看>>
swing和java里嵌入浏览器
查看>>
android之SoundPool
查看>>
Python学习-反射相关函数
查看>>
ubuntu11.10安装五笔输入法
查看>>
我的友情链接
查看>>
解决zabbix_get 获取不到自定义key一例
查看>>
DBNULL和NULL
查看>>
Confluence 6 有关 AD 的一些特殊说明
查看>>
linux系统管理之五:开机、关机、服务状态及系统密码修改
查看>>
Windows环境下的NodeJS+NPM+Bower安装配置
查看>>
LeetCode:Valid Number - 判断字符串中内容是否为数字
查看>>