set集合 深淺拷貝

2022-05-06 21:18:10 字數 4192 閱讀 9111

1.基礎資料型別補充:

1.把列表用join轉換成字串

li = ['我是誰','我在哪','我在幹什麼']

s = '_'.join(li)

print(s)

# 我是誰_我在哪_我在幹什麼

li = ['成龍演的我是誰']

s = '_'.join(li)

print(s)

# 成_龍_演_的_我_是_誰

split()可以把字串切割成列表

s = '成_龍_演_的_我_是_誰'

s.split('_')

print(s)

#  ['成','龍','演','的','我','是','誰']

2. 列表的迴圈刪除

for的執行過程. 會有乙個指標來記錄當前迴圈的元素是哪乙個,

一開始這個指標指向第0 個. 然後獲取到第0個元素. 緊接著刪除第0個.

這個時候. 原來是第乙個的元素會自動的變成第0個. 然後指標向後移動

一次, 指向1元素. 這時原來的1已經變成了0, 也就不會被刪除了.

辦法1.

用乙個新列表記錄要刪除的內容,然後迴圈老列表刪除新列表裡內容。

li = ['1','2','3','4','5','6','7']

lst = # 新建乙個列表

for el in li:  # 迴圈遍歷列表的每一項

for el in lst:     #  迴圈遍歷新列表,拿到要刪除的每一項。

li.remove(el)  # 老列表指定刪除新列表裡想要刪除的每一項。

print(li)          #  列印老列表

#  空列表     

辦法2.

用range 迴圈列表(len)次,用pop從最後一位開始刪除。

li = ['1','2','3','4','5','6','7']

for el in range(0,len(el)): # 迴圈遍歷列表的長度,拿到列表中的每一項。

li.pop() # 然後用pop從最後一位開始刪除。

print(li)    #  列印列表

#      空列表

注意: 由於刪除元素會導致元素的索引改變, 所以容易出現問題. 盡量不要

再迴圈中直接去刪除元素. 可以把要刪除的元素新增到另乙個集合中然後再批

量刪除.

feomkeys

dic = dict.fromkeys(['我是誰','我在哪'])

print(dic)

# ,set() ==> false

2.set集合

set集合是python的乙個基本資料型別. 一般不是很常用. set中的元素是不重複的.

無序的.裡面的元素必須是可hash的(int, str, tuple,bool), 我們可以這樣來記.

set就是dict型別的資料但是不儲存value, 只儲存key. set也用{}表示

注: set集合中的元素必須是可hash的, 但是set本身是不可hash得. set是可變的.

1.增s =

s.add('演電影')  

print(s)

# 注:

重複的內容不會新增到set集合中。

s =

s.update('鬼知道')  #  迭代新增

print(s)

# 2.刪

s =

s.pop()  # 隨機刪除乙個

print(s)

# s =

s.remove('我是誰')  # 指定元素刪除

print(s)

# s =

s.clear()  # 預設清空

print(s)

3.改註: set集合中的資料沒有索引. 也沒有辦法去定位乙個元素. 所以沒有

辦法進行直接修改.我們可以採用先刪除後新增的方式來完成修改操作。

s =

s.remove('我在幹什麼')  # 先指定刪除

s.add('我是演員') # 再新增

print(s)

# 4.查

注:set是乙個可迭代物件. 所以可以進行for迴圈。

s =

for el in s:

print(el)  # 列印set中的每一項

# 我是誰

我在幹什麼

我在哪5.常用操作

交集s =

s1 =

print(s & s1)  # 兩個集合中共有的

print(s.intersection(s1))

並集s =

s1 =

print(s | s1) # 綜合兩個集合共有的(不重複)

print(s.union(s1))

差集s =

s1 =

print(s1 - s)   # 誰-誰,就得到第乙個單獨存在的。

print(s1.difference(s))

反交集s =

s1 =

print(s ^ s1)   # 兩個集合中單獨存在的。

print(s.symmetric_difference(s1))

子集(判斷)

s =

s1 =

print(s < s1)  # s在s1中,所以s是s1的子集。

print(s.issubset(s1))

超集(判斷)

s =

s1 =

print(s1 > s)  # s1包含s,所以s1是s的超集。

print(s1.issuperset(s))

3.深淺拷貝

賦值:lst1 = ["金毛獅王", "紫衫龍王", "白眉鷹王", "青翼蝠王"]

lst2 = lst1

print(lst1)

print(lst2)

print(lst1)

print(lst2)

結果:['金毛獅王', '紫衫龍王', '白眉鷹王', '青翼蝠王', '楊逍']

['金毛獅王', '紫衫龍王', '白眉鷹王', '青翼蝠王', '楊逍']

dic1 =

dic2 = dic1

print(dic1)

print(dic2)

dic1['name'] = "範瑤"

print(dic1)

print(dic2)

結果:並不是複製乙份內容. 所以.lst1的記憶體指向和lst2是一樣的. lst1改變了,

lst2也發生了改變

淺拷貝:

lst1 = ["何炅", "杜海濤","周渝民"]

lst2 = lst1.copy()

print(lst1)

print(lst2)

print(id(lst1), id(lst2))

結果:兩個lst完全不一樣. 記憶體位址和內容也不一樣. 發現實現了記憶體的拷貝

lst1 = ["何炅", "杜海濤","周渝民", ["麻花藤", "馬芸", "周筆暢"]]

lst2 = lst1.copy()

print(lst1)

print(lst2)

print(id(lst1[3]), id(lst2[3]))

結果:['何炅', '杜海濤', '周渝民', ['麻花藤', '馬芸', '周筆暢', '無敵是多磨寂寞']]

['何炅', '杜海濤', '周渝民', ['麻花藤', '馬芸', '周筆暢', '無敵是多磨寂寞']]

4417248328 4417248328

注:淺拷貝. 只會拷貝第一層. 第一層的內容不會拷貝. 所以被稱為淺拷貝。

深拷貝:

import copy

lst1 = ["何炅", "杜海濤","周渝民", ["麻花藤", "馬芸", "周筆暢"]]

lst2 = copy.deepcopy(lst1)

print(lst1)

print(lst2)

print(id(lst1[3]), id(lst2[3]))

結果:['何炅', '杜海濤', '周渝民', ['麻花藤', '馬芸', '周筆暢', '無敵是多磨寂寞']]

['何炅', '杜海濤', '周渝民', ['麻花藤', '馬芸', '周筆暢']]

4447221448 4447233800

注:深度拷貝. 把元素內部的元素完全進行拷貝複製. 不會產生乙個改變另

乙個跟著改變的問題。

set集合 ,深淺拷貝

一 之前內容的補充 1.join 將列表轉換成字串 2.split 將字串轉換成列表 3列表和字典在進行for迴圈時是不可以刪除的 準確的說是刪除的不徹底 刪除操作需要先建立乙個新的空列表,把老列表裡的元素迴圈 然後給到新的列表,然後再迴圈新的列表,刪除舊的列表.列表的刪除用的是remove,字典用...

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 is id ,集合,深淺拷貝

01 今日內容大綱 1.is id 用法 2.塊 3.同一 塊下的快取機制 4.不同 塊下的快取機制 小資料池 5.總結 6.集合 了解 7.深淺copy 03 具體內容 1.id is python id 身份證號 i 100 s alex print id i print id s 比較的是兩邊...