No.6集合&内存相关
时间:2020-03-19 09:21:46
收藏:0
阅读:52
No.6
今日概要
- 集合
- 内存相关
内容回顾和补充
列表
reverse反转
sort排序
lst = [1,3,6,4,2,5] lst.sort() print(lst) #升序 lst.sort(reverse=True) print(lst) #降序
字典
keys/values/items
get
dic = {'k1':'v1','k2':'v2'} v1 = dic['k3'] #报错 print(v1) 结果:报错 v2 = dic.get('k3',666) #返回自定义值,不写返回None print(v2) 结果:666
pop
dic = {'k1':'v1','k2':'v2','k3':'v3'} result = dic.pop('k2') #pop删除的值可以查看 print(dic,result) del dic['k3'] #del删除无法查看 print(dic)
update
dic = {'k1':'v1','k2':'v2','k3':'v3'} dic.update({'k3':'v33','k4':'v4'}) #存在则修改,不存在则添加 print(dic)
判断是否有敏感字符?
str
v = 'Python全栈21期' if '全栈' in v: print('含敏感字符')
list/tuple
lst = ['alex','oldboy','wusir'] if 'wusir' in lst: print('含敏感字符')
dict
dic = {'k1':'v1','k2':'v2','k3':'v3'} 请判断:k1是否在其中? if 'k1' in dic: #默认判断的是key print('存在') 请判断:v2是否在其中? 方式一 msg = '不存在' if i in dic.values(): if i == 'v2': msg = '存在' print(msg) 方式二 list(dic.valuse()) #强制转换成列表 if 'v2' in list(dic.values()): print('存在') 请判断:k3:v3是否在其中? value = dic.get('k3') if value == 'v3': print('存在') else: print('不存在')
习题
让用户输入任意字符串,然后判断字符串是否包列表中的含敏感字符。 lst = ['炸弹','武器','暗杀'] content = input('请输入内容:') msg = '不含敏感字符' for i in lst: if i in content: msg = '含敏感字符' break print(msg)
内容详细
1.集合
- 无序
- 无重复
s = {1,2,3,4,5}
#为了和空字典区分空集合表示为set()
set()
- 独有功能
- add
- discard
- update
- intersection
- union
- difference
- symmetric_difference对称差集
- 公共功能
- len
- for
- 索引【无】
- 步长【无】
- 切片【无】
- del【无】
- 修改【无】
嵌套问题
列表/字典/集合 → #不能放在集合中 + 也不能作为字典的key 哈希算发 → #计算机内部会将数据进行哈希算法并得到一个数值(对应内存地址),以后用于快速查找。 特殊情况 info = {1,2,3,4,True,False,'alex',None,(1,2,3)} print(info) #不会显示True,因为True和1是重复的,它们哈希值是一样。 info ={1:'alex',True:'oldboy'} print(info) 结果:{1: 'oldboy'} #True和1重复,'oldboy'被认为是修改了'alex'
2.内存相关
示例一
#重新开辟内存并赋值,v1/v2使用的不是同一个地址 v1 = [11,22,33] v2 = [11,22,33] v1 = 666 v2 = 666 v1 = 'alex' v2 = 'alex'
示例二
#v1被重新赋值后,其指向新数据的内存地址,原数据内存地址保留。 #对于原数据的内存地址,解释器会将其回收处理。 v1 = [11,22,33] v1 = [11,22,33,44]
示例三
#v2和v1指向同一个地址 v1 = [11,22,33] v2 = v1 练习1(内部修改) v1 = [666] v2 = v1 v1.append(888) print(v2) #含有888 练习2(重新赋值) v1 = [666] v2 = v1 v1 = [1,2,3] #开辟新内存并重新赋值 print(v2) #结果[666] 练习3(重新赋值) v1 = 'alex' v2 = v1 v1 = 'oldboy' print(v2) #结果'alex'
示例四
v = [1,2,3] values = [11,22,v] 练习1 v.append(9) print(values) #结果[11,22,[1,2,3,9]] 练习2 valuse[2].append(9) print(v) #结果[11,22,[1,2,3,9]] 练习3 v = [1,2,3] values = [11,22,v] v = 999 print(values) #结果[11,22,[1,2,3]]列表中的指向没变。 练习4 v = [1,2,3] values = [11,22,v] values[2] = 666 print(v) #结果[1,2,3]列表中弟三个元素指向变了,v的指向没变。
示例五
v1 = [1,2] v2 = [2,3] v3 = [11,22,v1,v2,v1] #第三和第四个元素的指向和v1指向都一样。 v3[2] = 666 #此时v3中的第三个元素不再指向v1所指向的位置。 print(v3)
查看内存地址
v1 = [1,2,3] v2 = [1,2,3] print(id(v1),id(v2)) #地址不一样 v1 = [1,2,3] v2 = v1 print(id(v1),id(v2)) #地址一样
python的特殊
v1 = 1 v2 = 1 #v1和v2的指向地址本应该不同,但是对于python而言对于常见的数据为了提高性能节约空间会都使用一个地址存储。 int: -5 ~ 256 不在此范围的数字会重新开辟 str: 包含了非字母数字下划线的元素且乘以大于1的数会重新开辟 'alex_*'*5
== 和 is 有什么区别
v1 = [1,2] v2 = [1,2,3] v1 == v2 #False v1 = [1,2] v2 = [1,2,3] v1 is v2 #False v1 = [1,2] v2 = [1,2] v1 == v2 #True v1 is v2 #False v1 = [1,2] v2 = v1 v1 is v2 #True
- == 用于比较值是否相等
- is 用于比较内存地址是否相等
总结
- 列表
- reverse
- sort
- 字典
- get ▲
- update
- 集合
- add
- discard
- update
- intersection
- union
- difference
- symmetric_difference
- 特殊
- 嵌套:集合/字典的key
- 空:None
- 空集合:set()
- id
- type
- 嵌套的应用:▲
- 赋值
- 修改内部元素:列表/字典/集合
原文:https://www.cnblogs.com/elliottwave/p/12521786.html
评论(0)