一. 知識點補充
1. 列表和字典不能在迴圈過程中進行增刪操作,因為列表索引在迴圈過程會發生改變,字典規定迴圈不可改變.
刪除方法: 將需要大量刪除的列表或者字典遍歷取出要刪除的物件,放入乙個空列表,之後對列表進行迴圈遍歷,刪除原列表或字典.
2. fromkeys(' a ', ' b ')不會對原來的字典產生影響. 產生新字典(將a迭代變成字典的key, b為每個key的vlaue)
dic =二. set集合: 是乙個無序且不重複的元素集合dic.fromkeys(
"救世主
", "
暗帝" ) #
返回給你乙個新字典
(dic)
#輸出結果:
dic =
a = dic.fromkeys("
救世主", "
暗帝" ) #
返回給你乙個新字典
(a)#
輸出結果:
1. 集合物件是一組無序排列的可雜湊的值,集合成員可以做字典中的鍵。
集合支援用in和not in操作符檢查成員,由len()內建函式得到集合的基數(大小), 用 for 迴圈迭代集合的成員。
但是因為集合本身是無序的,不可以為集合建立索引或執行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值.
2. 建立空集合時,只能用set(),如果用第二種方法s={},建立的實際上是乙個空字典
s ={}3. 增加(type(s))
#輸出結果:
a=set('
boy'
)b=set(['
y', '
b', '
o','o'
])c=set()
d=e=
(a,type(a))
(b,type(b))
(c,type(c))
(d,type(d))
(e,type(e))
#執行結果如下:#
# #
# #
a=set('4.刪除(remove,discard,pop)python')
a.add(
'tina')
(a)b=set('
python')
b.update(
'tina')
(b)#
執行結果如下:##
#由以上**可以看出,add是單個元素的新增,而update是批量的新增。輸#出結果是無序的,並非新增到尾部。
c=5. 清空c.remove('p
(c)#
輸出結果: c=
c.discard('p'
(c)#
輸出結果: c=
c.pop()
(c)#
輸出結果: 執行結果如下:
#當執行c.remove('p','i')和c.discard('p','i')時,報錯:typeerror: #remove() takes exactly one argument (2 given),
#說明remove和discard刪除元素時都只能乙個乙個的刪,同add對應。
#remove,pop和discard的區別:
#discard刪除指定元素,當指定元素不存在時,不報錯;
#remove刪除指定元素,但當指定元素不存在時,報錯:keyerror。
#pop刪除任意元素,並可將移除的元素賦值給乙個變數,不能指定元素移#除。
c=三. 深淺拷貝c.clear()
(c)#
執行結果如下:
#set()
1. 賦值
lst1 = ["金毛獅王
", "
紫衫龍王
", "
白眉鷹王
", "
青衣服往"]
lst2 = lst1 #
列表, 進行賦值操作. 實際上是引用記憶體位址的賦值. 記憶體中此時只有乙個列表. 兩個變數指向乙個列表
楊左使") #
對其中的乙個進行操作. 兩個都跟著變
(lst2)
(lst1)
#輸出結果: ['金毛獅王', '紫衫龍王', '白眉鷹王', '青衣服往', '楊左使']
#['金毛獅王', '紫衫龍王', '白眉鷹王', '青衣服往', '楊左使']
2. 淺拷貝
lst1 = ["金毛獅王
", "
紫衫龍王
", "
白眉鷹王
", "青翼蝠王"]
#lst2 = lst1.copy() # lst2 和lst1 不是乙個物件了
lst2 = lst1[:] #
切片會產生新的物件
楊左使")#
對lst1進行新增
print(lst1)#
列印列表二者不相同
(lst2)
print(id(lst1))#
列印lst1和lst2的id,二者是不相同的
(id(lst2))
#輸出結果:['金毛獅王', '紫衫龍王', '白眉鷹王', '青翼蝠王', '楊左使']
#['金毛獅王', '紫衫龍王', '白眉鷹王', '青翼蝠王']
超人", "
七龍珠", "
葫蘆娃", "
山中小獵人
", ["
金城武", "
王力巨集", "
渣渣輝"
]]lst2 = lst1.copy() #
拷貝. 淺拷貝 拷貝第一層
大陽哥") #
對lst1中的列表內的列表進行新增
(lst1)
(lst2)
#輸出結果:
#['超人', '七龍珠', '葫蘆娃', '山中小獵人', ['金城武', '王力巨集', '渣渣輝', '大陽哥']]
#['超人', '七龍珠', '葫蘆娃', '山中小獵人', ['金城武', '王力巨集', '渣渣輝', '大陽哥']]
3. 深拷貝
importcopy
lst1 = ["
超人", "
七龍珠", "
葫蘆娃", "
山中小獵人
", ["
金城武", "
王力巨集", "
渣渣輝"
]]lst2 = copy.deepcopy(lst1) #
把lst1扔進去進行深度拷貝 , 包括內部的所有內容進行拷貝
大陽哥") #
對lst1列表內的巢狀列表進行新增
(lst1)
(lst2)
#輸出結果:
#['超人', '七龍珠', '葫蘆娃', '山中小獵人', ['金城武', '王力巨集', '渣渣輝', '大陽哥']]
#['超人', '七龍珠', '葫蘆娃', '山中小獵人', ['金城武', '王力巨集', '渣渣輝']]
*為什麼要有深淺拷貝
*拷貝比建立物件的過程要快
set集合和深淺拷貝
set 集合 不重複,無序,內容必須可hash 不可變 可用來去重複 lst 1,2,3,4,1,2,3,4,5 s set lst lst list s print lst 1,2,3,4,5 增加.add update 迭代新增 update abc 刪除.remove 直接刪除,不存在會報錯 ...
Python之集合與深淺拷貝
一.集合 可變資料型別,但是元素必須是不可變的資料型別,無序,元素具有唯一性 add 給集合新增乙個元素 clear 清空乙個集合 set copy 返回乙個淺拷貝集合 difference set1 set2 set1.difference set2 返回set1有set2中沒有的元素組成的集合 ...
set集合 ,深淺拷貝
一 之前內容的補充 1.join 將列表轉換成字串 2.split 將字串轉換成列表 3列表和字典在進行for迴圈時是不可以刪除的 準確的說是刪除的不徹底 刪除操作需要先建立乙個新的空列表,把老列表裡的元素迴圈 然後給到新的列表,然後再迴圈新的列表,刪除舊的列表.列表的刪除用的是remove,字典用...