位元組與字串的關係:8byte = 1kb,位元組是計算機內的最小單位,字串是能看到的最小單位
li1 = [11,22,33,44,55] #迴圈刪除,每乙個元素for i in range(leng(li1)) :
del li1[i]
print(i)
print(li1)
$列表分配索引超出範圍
0[22, 33, 44, 55]
1[22, 44, 55]
2[22, 44]
$indexerror: list assignment index out of range
分析原因:
第一次迴圈當i等於0時刪除索引為0的元素22,列表變為[22, 33, 44, 55]
第二次迴圈當i等於1時刪除索引為1的元素33,列表變為[22, 44, 55]
第三次迴圈當i等於2時刪除索引為2的元素55,列表變為[22, 44]
第四次迴圈當i等於3時刪除索引為3的元素不存在,報錯
列表可變每次刪除元素,列表都發生變化,導致出現上面問題
刪除列表方法:
1.採用倒序刪除法li1 = [11,22,33,44,55]
for i in range(len(li1)-1,-1,-1) :
del li1[i]
print(li1)
2.使用深拷貝先定義範圍,再迴圈刪除
lis = [11,22,33,44,55]import copy
for i in copy.deepcopy(lis) :
lis.remove(i)
print(lis)
習題:刪除列表奇數字(二種方法)
li1 = [11,22,33,44,55]li1 = li1[1::2]
print(li1)
$[22, 44]
li1 = [11,22,33,44,55]for i in range(len(li1)-1,-1,-2) :
del li1[i]
print(li1)
$[22, 44]
分析題:
lis = [11,22,33,44,55]for i in lis :
lis.pop()
print(lis)
$[11,22]
$為什麼不會全部刪除
$第一次進入迴圈i等於11,刪除最後乙個元素55,列表變為[11,22,33,44]
$第二次進入迴圈i等於22,刪除最後乙個元素44,列表變為[11,22,33]
$第三次進入迴圈i等於33,刪除最後乙個元素33,列表變為[11,22]
$第四次進入迴圈列表元素改變,不會再次迴圈
這樣可以解決問題
for i in range(len(lis)) :lis.pop()
print(lis)
#dict.fromkeys(seq[,value])dict1 = dict.fromkeys('asdfasdf]')
$#易範錯誤
dic = dict.fromkeys([1,2,3],'春哥')
dic = dict.fromkeys([1,2,3],)
print(dic)
$
字典的刪除
#迴圈刪除字典中鍵中包含'k『的鍵值對(兩種方法)dic1 =
li1 =
for key,value in dic1.items() :
if 'k' not in key :
print(li1)
#能過列表操作字典
dic1 =
li1 =
for key in dic1 :
if 'k' in key :
for i in li1 :
del dic1[i]
print(dic1)
print(bool(0),bool(''),bool(),bool(()),bool({}),bool(set()))$false false false false false false
可變的資料型別,集合元素必須是不可變資料型別,無序,集合自動去重複
基本操作:set1 = set()
set2 = set} 錯
print(set1) 列印無序
增set.add('')
set.update('')
刪set.pop 隨機刪除,有返回值
set.remove 按元素刪除,沒有元素報錯
set.clear() 清空列表
$set() 空集合,{}空字典
del set 整刪除,報錯
改不可變資料型別,無序不能改
for i in set:
print(i)
比較方法:
set1 =set2 =
#交集 &
set3 = set1 & set2
#並集(所有元素) | union(聯合)
set3 = set1 | set2
#反交集 ^ symmetric_difference
set3 = set1 ^ set2
#差集 第乙個集合獨有
set3 = set1 - set2
#子集和超集 < issubset issuperset
集合方法:
集合本身是可變資料型別,可以使用frozense()將集合凍住
l1 = [1,2,3]l2 = l1
print(l1,l2)
#淺拷貝copy
l1 = [1,2,3]
l2 = l1.copy()
print(l1,l2,l1 is l2)
print(l1,l2)
l1 = [1,2,[4,5,6],3]
l2 = l1.copy()
print(l1,l2,l1 is l2)
print(l1,l2)
print(l1,l2)
print(id(l1[2]),id(l2[2]))
#深拷貝copy
#import coyp
l1 = [1,2,3]
l2 = copy.deepcopy(l1)
enumerate() 函式用於將乙個可遍歷的資料物件(如列表、元組或字串)組合為乙個索引序列,同時列出資料和資料下標,一般用在 for 迴圈當中。
enumerate(sequence,[start=0])
li = ['a','b','c','d']for index,value in enumerate(li) :
print(index,value)
#數字列可以設定開頭列
for index,value in enumerate(li,100) :
print(index,value)
python 深淺拷貝案例 python 深淺拷貝
深淺拷貝 對於 數字 和 字串 而言,賦值 淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址 import copy a1 22255 a2 22255 print id a1 id a2 3428240 3428240 對於字典 元祖 列表 而言,進行賦值 淺拷貝和深拷貝時,其記憶體位址的變化...
python 深淺拷貝
建立乙個寬度為3,高度為4的陣列 mylist 0 3 4 0,0,0 0,0,0 0,0,0 0,0,0 但是當操作mylist 0 1 1時,發現整個第二列都被賦值,變成 0,1,0 0,1,0 0,1,0 0,1,0 list n n shallow copies of list concat...
python深淺拷貝
python 深淺拷貝 shallow copy 和 deep copy 對於乙個列表,列表裡面可以再放入乙個列表 1 若想複製這乙個列表,使用列表的普通的copy 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....