深淺copy及迴圈刪除注意事項

2022-09-18 10:24:35 字數 3036 閱讀 4178

將列表轉換成字串,每個元素間用"內容"拼接,

s = ["高華新","劉清揚","崔園樟"]

s1 = "-".join(s)

print(s1) >>> 高華新-劉清揚-崔園樟

ss = "高華新**劉清揚**崔園樟"

print(ss.split("**")) >>> ['高華新', '劉清揚', '崔園樟']

列表和字典在迴圈的時候不能直接刪除,需要把刪除的內容放在乙個新列表中,然後再迴圈新列表,再刪除字典和列表中所對應的內容

列表的直接remove刪除:

lst = ["紫雲", "大雲", "玉溪", "紫鑽","a","b"]

for el in lst: # 有乙個變數來記錄當前迴圈的位置

lst.remove(el)

print(lst) >>> ['大雲', '紫鑽', 'b']

#刪除的時候, 發現. 剩餘了一下內容. 原因是內部的索引在改變.

# # 需要把要刪除的內容記錄下來. 然後迴圈這個記錄. 刪除原來的列表

建立新列表刪除

lst = ["紫雲", "大雲", "玉溪", "紫鑽","a","b"]

li =

for i in lst: # 遍歷列表中的元素

for i in li: #遍歷新列表中的元素

lst.remove(i) #舊列表刪除內容,因為遍歷的是新列表中的元素,所以原來的列表元素位置就不會自動往前走,不會內部迴圈

# 是最安全的

print(lst) >>> # 空列表

lst = ["張國榮", '張鐵林', '張國立', "張曼玉", "汪峰"]

# 刪掉姓張的

zhangs =

for el in lst:

if el.startswith("張"): # 記錄姓張的.

for el in zhangs: #遍歷新列表

lst.remove(el) #刪除老列表中姓張的

print(lst) >>> ['汪峰']

print(zhangs) >>> ['張國榮', '張鐵林', '張國立', '張曼玉'] #新列表中全是姓張的

dic = 

lst =

for i in dic:

for i in lst:

dic.pop(i)

print(dic) >>> {}

直接用類(class)訪問,返回新字典,對原字典沒有影響

後面的value是多個key共享乙個value

>>>

#形成新字典,與原字典無關聯,遍歷前面形成key,共享後面乙個value

print(dic.fromkeys("ab",["蘋果","橘子"]))

>>>

# 返回新字典. 和原來的沒關係

ret = dic.fromkeys("orange", "橘子") # 直接用字典去訪問fromkeys不會對字典產生影響

ret = dict.fromkeys("abc",["哈哈","呵呵", "吼吼"]) # fromkeys直接使用類名進行訪問

print(ret)

>>>

a = ["哈哈","呵呵", "吼吼"]

ret = dict.fromkeys("abc", a) # fromkeys直接使用類名進行訪問

print(ret)

>>>

特點:無順序,不重複,裡面元素是可雜湊(不可變)的

作用:用來去重

本身是可變的資料型別,有增刪改查操作

frozenset()凍結的集合. 不可變的. 可雜湊的,凍結後集合不能再新增或刪除任何元素。

s = 

lst = [11,5,4,1,2,5,4,1,25,2,1,4,5,5]

s = set(lst) # 把列表轉換成集合. 進行去重複

lst = list(s) # 把集合轉換回列表.

print(lst) >>> [1, 2, 4, 5, 11, 25] #去重

# 集合本身是可變的資料型別, 不可雜湊, 有增刪改查操作

s =

s.update("麻花藤") # 迭代更新 無序

print(s) >>>

賦值, 沒有建立新物件. 共用同乙個物件,他們是相同的,賦值後的變數指向原有的記憶體位址

拷貝第一層內容.不拷貝內部子物件,用 [:]或copy() 

lst1 = ["金毛獅王", "紫衫龍王", "青翼蝠王", "白眉鷹王",["張無忌","趙敏","周芷若"]]

print(lst1.copy()) #淺拷貝 拷貝出來的列表第一層與原來是不同的記憶體位址,第二層指向原來的位址

>>>

['金毛獅王', '紫衫龍王', '青翼蝠王', '白眉鷹王', ['張無忌', '趙敏', '周芷若']]

print(lst1[:]) #淺拷貝

>>>

['金毛獅王', '紫衫龍王', '青翼蝠王', '白眉鷹王', ['張無忌', '趙敏', '周芷若']]

拷貝所有內容. 包括內部的所有,形成乙個新的物件,雖然與之前的值和內容一模一樣,但是它們完完全全的兩個物件,用deepcopy()

lst1 = ["金毛獅王", "紫衫龍王", "青翼蝠王", "白眉鷹王",["張無忌","趙敏","周芷若"]]

lst2 = copy.deepcopy(lst1)

print(lst2) >>> ["金毛獅王", "紫衫龍王", "青翼蝠王", "白眉鷹王",["張無忌","趙敏","周芷若"]]

print(id(lst1)) >>> 358961124936

print(id(lst2)) >>> 358961315656

# lst1和lst2 是兩個不同記憶體位址的

迴圈必須注意事項

今天在工作中遇見乙個場景 父元件向子元件中傳遞資料的時候,在子元件中父元件傳遞過來的資料進行迴圈的時候 子元件報錯 typeerror cannot read property menu pid of null at vuecomponent.gettree 後來發現報錯的原因是在進行迴圈的時候,g...

ln s軟鏈結刪除方式及注意事項

mkdir test chk touch test chk test.txt vim test chk test.txt 這一步隨便在這個test.txt裡寫點東東即可 下面我們來建立test chk目錄 的軟鏈結 ln s test chk test chk ln 軟鏈結建立好了,我們來看看怎麼刪...

assert 用法及注意事項

assert 用法及注意事項 assert功能是測試乙個條件並可能是程式終止。它首先測試條件,如果為假,則呼叫abort使程式退出。注意事項 1 在函式開始前,檢查引數的合法性 2 每個assert只檢驗乙個條件,因為同時檢查多個條件時,如果測試失敗,就不能斷言是由那個條件失敗引起的 3 不能改變環...