2018.12.4 今日所學
今日只要學習了
一. 基礎資料型別的補充
二 ..深淺拷貝
一 . 主要內容:
之前講的int 跟 str 已經講過了80%的內容 接下來說剩下的:
1 .join
join與之前的spilt 作用是相反的. join 是將列表中的資料通過操作變成字串 . 而split是通過字串的切割將字串變成列表 .
具體用法: 如 :li = ["李嘉誠", "麻花藤", "?海峰", "劉嘉玲"]
li1=' _ ' .join(li)
print( li1 ) 結果為''李嘉誠_麻花藤_?海峰_劉嘉玲''
由此我們可以看出join是將原來的列表型別變成了一個字串
對比split :
str = "李嘉誠,麻花藤,?海峰,劉嘉玲"
str1=str.split(" ,")
print(str1) 結果為 ['李嘉誠','麻花藤','?海峰','劉嘉玲']
我們可以看到這裡的split是將之前的字串形式變成了列表的形式
列表:
迴圈刪除列表中的每一個元素.
li = [11, 22, 33, 44]
for e in li:
li.remove(e)
print(li)
結果:
[22, 44]
這裡的原因是 for 在迴圈的過程中 ,會有一個指標記錄當前迴圈的元素是哪一個,一開始這個元素的指向是第0個,然後執行獲取, 刪除命令.當刪除完第一個元素之後,之前第二個元素變成了第一個元素,索引改變了,但是指標指向了第二個元素,剛好錯開了. 如果用pop刪除系統會報錯,只有這樣才是可以的.
for el in range(len(li)):
li.pop() # 這裡預設刪除的是最後一個 或者是 li.pop[0] #刪除第一個元素
這裡我們要講的辦法是用另一個列表記錄你要刪除的內容 ,然後迴圈刪除原來要刪除的列表
如: li = [11, 22, 33, 44]
li1=[]
for el in li:
li1.append(el)
for e in li1:
li.remove(e)
print(e)
注意: 由於元素刪除後會導致元素的索引改變,容易出現問題,所以不要在迴圈中直接去單楚楚元素.可以把要刪除的元素放到另一個列表中去,通過另一個列表的迴圈刪除原來列表中的元素
dict 中可以通過fromkeys()來建立新的字典:
dic=dict.fromkeys(['jay','jj'],['周杰倫','麻花藤'])
print(dic) 結果 :{ 'jay' : ['周杰倫','麻花藤'] , ' jj ': ['周杰倫','麻花藤'] }
關於fromkeys 的兩個大坑:
1,必須給前面賦值一個新的字典, 他返回的是新字典,與原字典無關.
dic={}
d=dic.fromkeys('張無極',[])
print(d) 結果為{'張':[],'無':'[]','極':[]}
2.如果value是可變的值.
dic={}
d=dic.fromkeys('張無極',[])
dic['張']='呵呵'
print(dic) 結果為{'張':[呵呵],'無':'[呵呵]','極':[呵呵]}
原因: 這裡的'張' '無' '極'用的是同一個[],如果其中一個改變了[]的值,其他的也會改變
二 .深淺拷貝
1 淺拷貝( 只拷貝第一層) 拷貝出來的內容不是之前的原內容,只是建立了一個和之前一樣的 (此處可以聯想的抄作業)
lst1 = ["金毛獅王", "紫衫龍王", "白眉鷹王", "青翼蝠王"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("楊逍")
print(lst1)
print(lst2)
結果:
["金毛獅王", "紫衫龍王", "白眉鷹王", "青翼蝠王" '楊逍']
["金毛獅王", "紫衫龍王", "白眉鷹王", "青翼蝠王", '楊逍']
2. 深拷貝 物件的所有內容都要複製
from copy
lst2=copy.deepcopy(lst1)
這裡的lst2就是深拷貝了lst1 中的所有內容,不會產生一個改變另一個跟著
改變的問題