基础数据类型之集合和深浅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)

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

字典当循环字典时,如果在循环中删除某个或者某些键值对,字典的键值对个数改变,长度改变,容易出错。
时间: 2024-11-08 00:43:29

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

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

一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址. 小数据池: 前提:int,str,bool 1,节省内存. 2,提高性能和效率. 小数据池是什么? 在内存中,创建一个'池',提前存放了 -5 ~256 的整数,一定规则的字符串和bool值. 后续程序中,如果设置的变量指向的是小数据池的内容,那么就不会再内存中重新创建. 小数据池与代码块的关系

python之集合、深浅copy、文件操作、函数初识

本节内容:集合.深浅copy.文件操作.函数初识 1.小知识点补充 2.编码二 3.集合 4.深浅copy 5.文件操作 6.函数的初识 1.小知识点补充                                                                                           1.1 小数据池====str.int 小数据池存在的意义就是节省内存 节省内存,位多个变量开辟一个共享空间(str和int) int:-5--256 int===

集合 相关 深浅copy

''' 集合:可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复. {} ''' # set1 = set({1,2,3}) # set2 = {1,2,3,[2,3],{'name':'alex'}} # 错的 # print(set1) # print(set2) # set1 = {'alex','wusir','ritian','egon','barry',} #增 #add # set1.add('女神') # print(set1) #update # set1.upd

day7_集合,深浅copy

一.集合 集合是无序的,不重复的数据集合,其元素为可哈希(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键).以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系测试,测试两组数据之前的交集.差集.并集等关系. 1.集合的创建 set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'} 2.集合的增 set1 = {'alex',

集合和深浅copy

集合 集合里面的元素必须是不可变的数据类型,集合本身是可变的数据类型. 集合是无序的,不重复. 1,列表去重. l1 = [1, 1, 2, 3, 4, 3, 2, 4, 5, 6] set1 = set(l1) print(set1) l1 = list(set1) print(l1) 2,关系测试. 原文地址:https://www.cnblogs.com/wangkaiok/p/9870113.html

集合及深浅copy 01

集合 #集合 可变数据类型,但是存储的元素必须是可变数据类型,无序,不重复! set1 = set({1,2,3}) #set2 = set(1,2,[2,4],{2,4}) # 错的,必须放可哈希的 print(set1) print(set2) 增 #集合的添加 set1 = set({'suidyai','kjsadfhik','ldsahf'}) set1.add('套你大象') print(set1) set2 = {'sdjka','jaksahd'} set2.update('套你

python之旅 1-29 补充内容,深浅copy

#  l1 = [111,222,333,444,555] 将索引为奇数位的元素删除. # l1 = [111,222,333,444,555] # del l1[1::2] # print(l1) 通过删除列表中的元素 # for i in range(len(l1)-1,0,-1): # if i%2==0: # del l1[i-1] # print(l1) 通过循环列表,用range指代索引位置 for i in l1: if l1.index(i)%2==0: l2.append(i)

Python全栈__数据类型的补充、集合set、深浅copy

1.数据类型的补充 1.1 元组 当元组里面只有一个元素且没有逗号时,则该数据的数据类型与括号里面的元素相同. tu1 = ('laonanhai') tu2 = ('laonanhai') print(tu1, type(tu1)) print(tu2, type(tu2),) tu1 = (1) tu2 = (1,) print(tu1, type(tu1)) print(tu2, type(tu2)) tu1 = ([1, 2, 3]) tu2 = ([1, 2, 3],) print(t

is == id 的用法;代码块;深浅copy;集合

1 内容总览 is == id 用法 代码块 同一代码块下的缓存机制 (字符串驻留机制) 不同代码块下的缓存机制 (小数据池) 总结 集合(了解) 深浅copy 2 具体内容 id is == # id 获取对象的内存地址,内存地址就相当于人的身份证号,唯一且不可变 # i = 100 # s = 'alex' # print(id(i)) #1892120688 # print(id(s)) #2707107640912 # == 比较的是两边的值是否相等 l1 = [1, 2, 3] l2