python中的set集合和深淺拷貝

一.基礎數據類型的補充

1.str中的join算法,將列表轉換成字符串,並用'_'(或其餘)算法

1 li=['李嘉誠','馬化騰','劉嘉玲','黃海峯',] 2 s='_'.join(li) 3 print(s)        #李嘉誠_馬化騰_劉嘉玲_黃海峯

2.循環刪除列表中的每一個元素app

li=['李嘉誠','馬化騰','劉嘉玲','黃海峯',] for el in li: li.remove(el) print(li)       #['馬化騰', '黃海峯']

緣由分析:for循環在運行過程當中會有一個指針記錄當前循環的元素是哪個.spa

 方法一:指針

1 li=['李嘉誠','馬化騰','劉嘉玲','黃海峯',] 2 for i in range(0,len(li)): 3     li.pop()    #括號中什麼也不寫,默認刪除最後一個
4 print(li)       #[]

 方法二:刪除元素會致使列表中元素的索引起生改變,因此容易出現問題.code

1 li=['李嘉誠','馬化騰','劉嘉玲','黃海峯',] 2 del_li=[] 3 for el in li: 4     del_li.append(el)    #用另外一個列表來記錄我要刪除的內容
5 for el in del_li:      #循環另外一個列表
6     li.remove(el)       #把原列表中的每個元素對應刪除
7 print(li)         #[]

字典也是如此:對象

1 dic = {"提莫":"馮提莫", "髮姐":"陳一發兒", "55開":"盧本偉"} 2 lis=[] 3 for el in dic: 4  lis.append(el) 5 for el in lis: 6  dic.pop(el) 7 print(dic)    #{}

3.dict中的元素在迭代的過程當中是不容許進行刪除的,要想刪除,就要把想刪除的元素暫時保存在一個list中,在循環list刪除.blog

1 dic = {"提莫":"馮提莫", "髮姐":"陳一發兒", "55開":"盧本偉"} 2 lis=[] 3 for el in dic: 4     if el.startswith(''): 5  lis.append(el) 6 for el in lis: 7  dic.pop(el) 8 print(dic)        #{'髮姐': '陳一發兒', '55開': '盧本偉'}

4.dict中的dict.fromkeys(),能夠幫助咱們經過list建立一個dict索引

1 a','b'],['c','d'])
2 print(dic)      #{'a': ['c', 'd'], 'b': ['c', 'd']} 前面的迭代被做爲字典的鍵,後面的被做爲字典的value

5.字符串和列表的相互轉換rem

把字符串轉換成列表:split()字符串

把列表轉換成字符串:join()

二.set集合

特色:set中的元素是無序的,不重複的,裏面的元素必須是可hash的(int,str,tuple,bool),set就是字典類型的數據,可是不保存value.set用{}表示.

注意:set集合中的元素必須是可hash的,可是set自己是不可hash的.

不可重複,無序(通常用來去重):

1 s={'1','2','2'} 2 print(s)      #第一次運行{'1', '2'} 第二次運行{'2', '1'}

1.增

(1) s.add():

1 s={'劉嘉玲','張曼玉','王祖賢'} 2 s.add('美麗的我') 3 s.add('王祖賢')        #重複的內容不會添加到set中
4 print(s)               #{'劉嘉玲', '美麗的我', '王祖賢', '張曼玉'}

(2) s.update():

1 s={'劉嘉玲','張曼玉','王祖賢'} 2 s.update('馬化騰')      #迭代添加
3 print(s)                 #{'化', '劉嘉玲', '張曼玉', '騰', '王祖賢', '馬'}

2.刪

(1)  s.pop()

1 s={'劉嘉玲','張曼玉','王祖賢'} 2 # a=s.pop() #隨機刪除一個
3 # print(a)
4 # print(s)

(2) s.remove()

1 s={'劉嘉玲','張曼玉','王祖賢'} 2 # s.remove('劉嘉玲') #直接刪除指定元素,若是不存在會報錯
3 # print(s)

(3) s.clear()

1 s={'劉嘉玲','張曼玉','王祖賢'} 2 s.clear() 3 print(s)     #set()

3.改

set中的數據沒有索引,因此沒有辦法定位一個元素,所以沒有辦法進行直接修改.

咱們能夠採用先刪除後添加的方式進行修改

 

#把劉嘉玲改爲趙本山
s={'劉嘉玲','張曼玉','王祖賢'} s.remove('劉嘉玲')     #刪除
s.add('趙本山')       #添加
print(s)              #{'趙本山', '張曼玉', '王祖賢'}

 

4.查

用for循環進行查看

 

1 s={'劉嘉玲','張曼玉','王祖賢'} 2 for el in s:      #王祖賢
3     print(el)     #劉嘉玲
4                   #張曼玉

 

5.經常使用操做

 

 1 s1={'劉能','趙四','皮長山'}  2 s2={'劉科長','馮科長','皮長山'}  3 print(s1 & s2)              #交集
 4 print(s1.intersection(s2))  #交集
 5 
 6 print(s1 | s2)              #並集
 7 print(s1.union(s2))         #並集
 8 
 9 print(s1 - s2)              #差集
10 print(s1.difference(s2))    #差集
11 
12 print(s1 ^ s2)               #反差集
13 print(s1.symmetric_difference(s2))    #反差集
14 
15 print(s1 < s2)               #子集
16 print(s1.issubset(s2))       #子集
17 
18 print(s1 > s2)               #超集
19 print(s1.issuperset(s2))     #超集

 

三.深淺拷貝

1. 賦值. 沒有建立新對象. 公用同一個對象
2. 淺拷貝. 拷貝第一層內容. [:]或copy()
1 lst1=['何炅','杜海濤','謝娜',['李維嘉']] 2 lst2=lst1.copy()
  print(lst1)           #2571062967176
print(lst2) #2571062967176
3 print(id(lst1[3])) #2449591204744 4 print(id(lst2[3])) #2449591204744
3. 深拷貝. 拷貝全部內容. 包括內部的全部.
1 import copy 2 lst1=['何炅','杜海濤','謝娜',['李維嘉']] 3 lst2=copy.deepcopy(lst1) 4 print(lst1) 5 print(lst2) 6 print(id(lst1),id(lst2))   #3135828524616 3135828628360
相關文章
相關標籤/搜索