1. 程式人生 > >基礎資料補充

基礎資料補充

列表不能迴圈新增 會變成死迴圈
列表使用for迴圈刪除元素 for迴圈機制會導致有些操作刪不乾淨:

li = [1,2,3,4,5]
for i in li:
    li.remove(i)
print(li)

結果:
[2,4]
#remove在刪除的時候,後邊的數字會補位到前一位,導致刪除不乾淨
li = [1,2,3,4,5]
for i in li:
    li.pop()
print(li) 

結果:
[1, 2]

#迴圈到3的時候,後邊的元素已經刪除了,沒有辦法繼續迴圈

列舉幾種可以實現清空列表的方法:

li = [1,2,3,4,5]
for
i in range(len(li)): li.pop() print(li) 結果: []
li = [1,2,3,4,5]  
l2 = []
for i in li:
    l2.append(i)
for j in l2:
    li.remove(j)
print(li)

結果:
[]

#定義一個空列表,利用偷換概念的方法進行清空
li = [1,2,3,4,5]
for i in li:
    li.clear()           
print(li)

結果:
[]
#clear可以很容易的清空列表

字典刪除元素 字典在for迴圈的時候 不能修改:

dic = {'1':22,'5':'22'}
lst = []
for i in dic:
    lst.append(i)   
for j in lst:
    dic.pop(j)
print(dic)

結果:
{}

#同樣適用偷換概念的方法

fromkeys:

結構是dict.fromkeys('可迭代物件','值')

第一個位置是可迭代物件,也就是字典的鍵
第二個位置 不寫是None 也就是字典的值
dic = dict.fromkeys('1234','你好')
print(dic)

dic['2'] = '明天'   
print(dic)

dic[
'3'] = [5,6,7] print(dic) 結果: {'1': '你好', '2': '你好', '3': '你好', '4': '你好'} {'1': '你好', '2': '明天', '3': '你好', '4': '你好'} {'1': '你好', '2': '明天', '3': [5, 6, 7], '4': '你好'}

當fromkeys當中新增的值是可變資料型別,當改變這個可變資料型別時,所有鍵對應的值都要改變:

dic = dict.fromkeys('你好啊',[1,2,3])
print(dic)
dic[''].append(99)
print(dic)

結果:
{'': [1, 2, 3], '': [1, 2, 3], '': [1, 2, 3]}
{'': [1, 2, 3, 99], '': [1, 2, 3, 99], '': [1, 2, 3, 99]}

深淺拷貝:

淺拷貝: 只拷貝第一層元素,元素是不可變的就不會變,元素是可變的,兩個都會變

li = [1,2,3,4]
lst = li.copy()
print(li)
print(lst)

li[0] = 6
print(li)   
print(lst)

結果:
[1, 2, 3, 4]
[1, 2, 3, 4]

[6, 2, 3, 4]
[1, 2, 3, 4]

#當li的元素改變是,lst不變
li = [1,2,3,4,[5,6,7]]   
lst = li.copy()
print(li)
print(lst)

li[-1].append(90)
print(li)   
print(lst)  

結果:
[1, 2, 3, 4, [5, 6, 7]]
[1, 2, 3, 4, [5, 6, 7]]

[1, 2, 3, 4, [5, 6, 7, 90]]
[1, 2, 3, 4, [5, 6, 7, 90]]
#列表中包含可變資料列表,當li改變時,lst也會變

深拷貝: 不可變資料型別公用,可變資料型別重新開闢空間    import copy模組:

import copy
li = [1,2,3,4,[5,6,7]]
lst = copy.deepcopy(li) 
print(li)
print(lst)

li[-1].append(90)
print(li)   
print(lst)

結果:
[1, 2, 3, 4, [5, 6, 7]]
[1, 2, 3, 4, [5, 6, 7]]

[1, 2, 3, 4, [5, 6, 7, 90]]
[1, 2, 3, 4, [5, 6, 7]]