python筆記06 資料型別
上個筆記內容補充
- 補充
- 串列
-
reverse,反轉,
v1 = [1,2,3111,32,13]
print(v1)
v1.reverse()
print(v1)
v1=v1[::-1] -
sort
v1 = [11,22,3111,32,13]
print(v1)# v1.sort(reverse=False) # 從小到大(默認) # v1.sort(reverse=True) # 從大到小 # print(v1)
-
- 字典
-
keys/values/items
info = {'k1':'v1','k2':'v2'}
for x1,x2 in info.items():
print(x1,x2)
for item in info.items():
print(item)
for k in info.values():
print(k)
for x in info.keys():
print(x)
輸出:
k1 v1
k2 v2
('k1', 'v1')
('k2', 'v2')
v1
v2
k1
k2 -
get
info = {'k1':'v1','k2':'v2'}# v1 = info['k1']#k1無值,會報錯. # v2 = info.get('k1') # 如果k1無值,回傳None給v2. # v3 = info.get('k1',666)#如果k1無值,回傳666給v3. # print(v2) # None資料型別,改型別表示空(無任何功能,專門用于提供空值) -
pop
info = {'k1':'v1','k2':'v2'}
result = info.pop('k2')
print(info,result)
del info['k1']
print(info)
輸出的結果:
{'k1': 'v1'} v2
{} -
update
info = {'k1':'v1','k2':'v2'}
# 不存在,則添加/存在,則更新
info.update({'k3':'v3','k4':'v4','k2':666})
print(info)
----------
info = {'k1':'v1','k2':'v2'}
info.update({'k3':666})
print(info)
輸出的結果:
{'k1': 'v1', 'k2': 'v2', 'k3': 666}
-
- 判斷一個字串中是否有敏感字符?
-
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) # 方式二: if 'v2' in list(v.values()): # 強制轉換成串列 ['v1','v2','v3'] pass # 請判斷:k2:v2 是否在其中? value = https://www.cnblogs.com/cuiyongchao007/p/v.get('k2') if value =https://www.cnblogs.com/cuiyongchao007/p/='v2': print('存在') else: print('不存在') -
練習題
# 讓用戶輸入任意字串,然后判斷此字串是否包含指定的敏感字符,char_list = ['利奇航','堂有光','炸展會'] content = input('請輸入內容:') # 我叫利奇航 / 我是堂有光 / 我要炸展會 success = True for v in char_list: if v in content: success = False break if success: print(content) else: print('包含銘感字符') # 示例: # 1. 昨天課上最后一題 # 2. 判斷 ‘v2’ 是否在字典的value中 v = {'k1':'v1','k2':'v2','k3':'v3'} 【回圈判斷】 # 3. 敏感字
-
- 串列
內容詳細
- 集合 set
集合特點:無序,無重復
v = {1,2,3,4,5,6,99,100}
# 疑問:v = {}
"""
None
int
v1 = 123
v1 = int() --> 0
bool
v2 = True/False
v2 = bool() -> False
str
v3 = ""
v3 = str()
list
v4 = []
v4 = list()
tuple
v5 = ()
v5 = tuple()
dict
v6 = {}
v6 = dict()
set
v7 = set()
"""
-
集合獨有功能
- add
- discard
- update
- intersection
- union
- difference
- symmetric_difference
v = {1,2,3,4,5,6,99,100}
v.clear()#表示清空
#增加
v.add('zhangsan')
print(v)
#洗掉
v.discard(100)
print(v)
#批量增加
v.update({101,102,105})
print(v)
v1=v.intersection([101,102])
print(v1)
#交集
v2=v.intersection({102,103,105,106})
print(v2)
#并集
v3=v.union({1000,1001,1002,1005})
print(v3)
#差集
v4=v.difference({1,2,3})
print(v4)
#對稱差集,v5屬于兩者并集,且不屬于兩者交集,
v5=v.symmetric_difference({1,'lisi',5})
print(v5)
輸出:
{1, 2, 3, 4, 5, 6, 99, 100, 'zhangsan'}
{1, 2, 3, 4, 5, 6, 99, 'zhangsan'}
{1, 2, 3, 4, 5, 6, 99, 101, 'zhangsan', 105, 102}
{101, 102}
{105, 102}
{1, 2, 3, 4, 5, 6, 99, 101, 'zhangsan', 105, 102, 1000, 1001, 1002, 1005}
{99, 4, 101, 5, 6, 'zhangsan', 105, 102}
{2, 3, 4, 99, 6, 101, 'zhangsan', 105, 102, 'lisi'}
-
公共功能
- len
v = {1,2,'李邵奇'}
print(len(v)) - for回圈
v = {1,2,'李邵奇'}
for item in v:
print(item) - 集合沒有的特性:索引、步長、切片、洗掉、修改
- len
-
嵌套問題
# 1. 串列/字典/集合 -> 不能放在集合中+不能作為字典的key(unhashable)
集合中的元素是通過has計算,放在has表中,
# info = {1, 2, 3, 4, True, "國風", None, (1, 2, 3)}
# print(info),輸出中沒有true,true和1重合,
# 2. hash -> 哈希是怎么回事?
# 因為在內部會將值進行哈希演算法并得到一個數值(對應記憶體地址),以后用于快速查找,# 3. 特殊情況 # info = {0, 2, 3, 4, False, "國風", None, (1, 2, 3)} # print(info) ,False和None重合, # info = { # 1:'alex', # True:'oldboy' # } # print(info), #{1: 'oldboy'} #(1,和true在has計算后重合) -
記憶體相關
-
示例一
v1 = [11,22,33]
v2 = [11,22,33]v1 = 666 v2 = 666 v1 = "asdf" v2 = "asdf" # 按理 v1 和 v2 應該是不同的記憶體地址,特殊: py快取機制: py小資料值:-5-256,值重復賦值,地址相同 字串:常見字串,重復賦值,地址相同 1. 整型: -5 ~ 256 2. 字串:"alex",'asfasd asdf asdf d_asdf ' ----"f_*" * 3 - 重新開辟記憶體, -
示例二:
v1 = [11,22,33,44]
v1 = [11,22,33]
print(v1)
[11, 22, 33] -
示例三:
v1 = [11,22,33]
v2 = v1# 練習1 (內部修改) v1 = [11,22,33] v2 = v1 v1.append(666) print(v2) # 含 666 # 練習2:(賦值) v1 = [11,22,33] v2 = v1 v1 = [1,2,3,4] print(v2)#v1重新賦值,v2還是指向v1 = [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]
這里v3中的v1,v2,v1表示的上面兩個串列的地址,v1,v2重新復制,v3不會變化, -
查看記憶體地址
"""
v1 = [1,2,3]
v2 = v1
v1.append(999)
print(v1,v2)
print(id(v1),id(v2))
"""""" v1 = [1,2,3] v2 = v1 print(id(v1),id(v2)) v1 = 999 print(id(v1),id(v2)) """問題:== 和 is有什么區別?
- == 用于比較值是否相等,
- is 用于比較記憶體地址是否相等,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/43578.html
標籤:其他
上一篇:(ubuntu系統)安裝opencv-python后,報錯libSM.so.6: cannot open shared object file: No such file or directory
