1. 程式人生 > >2018.12.4 今日所學

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 中的所有內容,不會產生一個改變另一個跟著

改變的問題