標籤:比較 規則 ati text lin epc 高效能 列表和元組 迭代
01昨天內容回顧
代碼塊:由一個檔案,一個函數,一個模組,一個類,互動模式下每一行都是一個代碼塊
Is == id:id()是查詢記憶體位址,==比較兩邊的值,is是比較兩邊的記憶體位址。
小資料池:
在記憶體中建立一個池,提前存放了-5~256的整數,一定規則的字串,後續程式中,如果設定的變數指向的是小資料內容,那就不會再記憶體中重新建立。
1.節省記憶體
2.提高效能和效率。
小資料池和代碼塊的關係。
同一個代碼塊:python在執行時,遇到了初始化對象,他會將這個變數和數值放在一個字典中,再次遇到他會從這字典中尋找。
不同代碼塊:python執行中,直接從小資料池中尋找。滿足條件id相同。
編碼:
Str》bytes:encode
Bytes》str:decode
02作業講解
03 基礎資料類型補充
元祖:如果元祖中只有一個資料,且沒有逗號,則還‘元祖‘與裡面的資料的資料類型相同。Print()將會得到是屬於元素的類型 ,得到的不是元祖。
Tu1=(1)
Print(tu1)得到的是元素
Tu1=(1,)
Tu2=(‘alex’,)
Tu3=(【1,2,3】,)
列表,元組,字串互相轉換
列表和元群組轉換為字串則必須依靠join函數
列表:列表和列表可以相加
L1=【1,2,3】
L2=【‘alex’,‘wusir’】
L3=l1+l3
Print()
在迴圈一個列表時,如果對列表中的某些元素進行刪除,
那麼次元素後面的所有元素就會前進一位,他們索引位置 就會變,所以不能在迴圈的時候,進行增刪
Eg:# for i in range(len(li)-1,-1,-1):
# if i %2==1:
# li.pop(i)
# print(li)
字典
Dic1=dic.fromkeys([1,2,3],’alex’)
Print(dic1)
在迴圈一個字典時,不能改變字典的大小(就是不能增減)。
資料類型的轉換。
Int str bool 轉換
Str《》types
Str《》list:字串轉換列表時用split,而list轉換為字串時,必須list全是字串。
04集合set
增:有add。update#update:迭代著增加
set1.update(‘A‘)print(set1)
set1.update(‘老師‘)print(set1)
set1.update([1,2,3])print(set1)
刪:
set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘}
set1.remove(‘alex‘) # 刪除一個元素print(set1)
set1.pop() # 隨機刪除一個元素print(set1)
set1.clear() # 清空集合print(set1)
del set1 # 刪除集合print(set1)
Set:
{‘name’,‘alex’,1,2,3}
集合要求裡面的元素必須是不可變的資料類型,但本身是可以變得,集合裡面的元素不重複,無序。
主要用途:
- 去重,
- 關係測試。
List去重
li=[1,2,2,3,4,6,1,3,]
# set1=set(li)
# li=list(set1)
# # print(set1)
# print(li)
集合比如#
set1=set({1,2,3})
# set2=set1
# print(id(set1),id(set2))
地址是不一樣的。
- 關係測試
交集&intersection
並集|union
差集—difference
反交集^ 或者 symmetric_difference
子集和超集
05 淺度copy
對於淺copy來說,第一層建立的是新的記憶體位址,而從第二層開始,指向的都是同一個記憶體位址,所以,對於第二層以及更深的層數來說,保持一致性。
l1 = [1,2,3,[‘barry‘,‘alex‘]]
l2 = l1.copy()
print(l1,id(l1)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895816
print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895048
l1[1] = 222print(l1,id(l1)) # [1, 222, 3, [‘barry‘, ‘alex‘]] 2593038941128print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2593038941896
l1[3][0] = ‘wusir‘
print(l1,id(l1[3])) # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016
print(l2,id(l2[3])) # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016
05 深度copy
對於深copy來說,兩個是完全獨立的,改變任意一個的任何元素(無論多少層),另一個絕對不改變
import copy
l1 = [1,2,3,[‘barry‘,‘alex‘]]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167816
print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048
l1[1] = 222
print(l1,id(l1)) # [1, 222, 3, [‘barry‘, ‘alex‘]] 2915377167816
print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048
l1[3][0] = ‘wusir‘
print(l1,id(l1[3])) # [1, 222, 3, [‘wusir‘, ‘alex‘]] 2915377167240
print(l2,id(l2[3])) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167304
python集合深淺copy