day06数据类型(四)
今日内容
- 集合
- 内存相关
- 深浅拷贝
内容回顾 & 补充
-
内容回顾
-
补充
-
列表
-
reverse,反转
v1 = [1,2,311,32,13] print(v1) v1.reverse() print(v1)
-
sort排序
# v1.sort(reverse=False) #从小到大(默认) v1.sort(reverse=True) #从大到小 print(v1)
-
-
字典
-
key/values/items
-
get
info = {'k1':'v1','k2':'v2'} # print(info['k1111']) # v2 = info.get('k1111') # print(v2) #返回None # v3 = info.get('k1111',666) # print(v3) #返回666 result = info.get('k111') print(result) if result == None: print('不存在') if result: print('存在') else: print('不存在') #None数据类型,改类型表示空(无任何功能,专门提供空值)
-
pop
# info = {'k1':'v1','k2':'v2'} # result = info.pop('k2') # print(info,result) # # del info['k1']
-
update
nfo = {'k1':'v1','k2':'v2'} info['k3'] = 'v4' #不存在则添加,存在则替换 info.update({'k3':'v3','k4':'v4'}) print(info)
-
-
判断一个字符串是否有敏感字符?
-
str
v = "Python全栈21期" if "全栈" in v: print('含敏感字符')
-
list/tuple
v = ['alex','oldboy','高老四','利奇航'] if '利奇航' in v: print('含敏感')
-
dict
v = {'k1':'v1','k2':'v2','k3':'v3'} #默认按照键判断,即:判断x是否是字典的键 if 'x' in v: pass #请判断:k1是否在其中? if k1 in v: pass #请判断:v2是否在其中? #方式一:循环判断 flag = '不存在' for v in v.values(): if v == v2: flag = '存在' print(flag) #方式二: #list(v.values()) #强制转换成列表['v1','v2','v3'] for 'v2' in list(v.values): pass #请判断:k2:v2是否在其中? value = v.get('k2') if value == 'v2': print('存在') else: print('不存在')
-
练习题
#让用户输入任意字符串,然后判断此字符串是否包含指定的敏感字符 char_list = ['利奇航','倘有光','炸掉四'] content = input('请输入内容:') #我叫利奇航 / 我叫倘有光 / 我叫炸掉四 success = True for v in char_list: if v in content: sucess = False break if success: print(content) else: print('包含敏感字符') #示例: # 1.昨天上课最后一题 # 2.判断'v2'是否在字典的value中 v = {'k1':'v1','k2':v2} # 3.敏感字
-
-
内容详细
1.集合set
- 无序
- 不重复
v = {1,2,3,4,5,6,99,100}
#疑问:v = {}
#1.空集合
# v = {} #空字典
# v1 = set()
# print(type(v1))
'''
None
int
v1 = 123
v1 = int() -> 0
bool
v2 = True/False
v2 = bool() -> False
str
v3 = ""
v3 = str()
list
v4 = []
v4 = list()
tupe
v5 = ()
v5 = tuple()
dict
v6 = {}
v6 = dict()
set
v7 = set()
'''
-
集合的独有功能
- add
- discard
- update
- intersection
- union
- difference
- symmetric_difference
-
公共功能
-
len
v = {1,2,'lishaoqi'} print(len(v))
-
for循环
v = {1,2,'lishaoqi'} for item in v: print(item)
-
索引【无】
-
步长【无】
-
切片【无】
-
删除【无】
-
修改【无】
-
-
嵌套
#1.列表/字典/集合 ->不能放在集合中+不能作为字典的key() # info = {1,2,3,4,True,"国风",None,(1,2,3)} # print(info) #2. hash -> 哈希是怎么回事? #因为在内部会将值进行哈希算法并得到一个数值(对应内存地址),以后用于快速查找 #3.特殊情况 # info = { # 1:'alex', # True:'oldboy' # } # print(info) #{1: 'oldboy'}
2.内存相关
-
示例一:
v1 = [11,22,33] v2 = [11,22,33] v1 = 666 v2 = 666 v1 = 'asdf' v2 = 'asdf' #按理 v1和v2应该是不同的内存地址,但python中具有小数据池缓存功能,特殊: 1.整型:-5 ~ 256 2.字符串:'alex','sefsdfe','weaff','wef_wef' ```"f*"3 重新开辟内存
-
示例二:再开辟一个内存空间
v1 = [11,22,33,44] v1 = [11,22,33]
-
示例三:指向同一个内存地址
v1 = [11,22,33] v2 = v1 #练习1(内部修改) v1 = [11,22,33] v2 = v1 v1.append(666) #内部修改 print(v2) #[11, 22, 33, 666] #练习2(赋值) v1 = [11,22,33] v2 = v1 v1 = [1,2,3,4] #赋值 print(v2) #[11, 22, 33] #练习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: values[2].append(999) print(v) #[1,2,3,999] #练习3: v = 999 print(values) #[11, 22, [1, 2, 3]] #练习4: values[2] = 666 print(v) #[1,2,3]
-
示例五
v1 = [1,2] v2 = [2,3] v3 = [11,22,v1,v2,v1]
-
查看内存地址
# v1 = [1,2,3] # v2 = [1,2,3] # v3 = v2 # print(id(v1),id(v2),id(v3)) ''' v1 = [1,2,3] v2 = v1 print(id(v1),id(v2)) v1 = 999 print(id(v1),id(v2)) '''
-
问题: == 和 is 有什么区别?
-
==用于比较值是否相等
-
is用于比较内存地址是否相等
-
总结
- 列表
- reverse
- sort
- 字典
- get
- update
- 集合
- add
- discard
- update
- intersection
- union
- difference
- symmetric_difference
- 特殊
- 嵌套:集合/字典的key
- 空:None
- 空集合
- id
- type
- 嵌套的应用
- 赋值
- 修改内部元素:列表/字典/集合