python中列表,字典等必須要註意的事項
阿新 • • 發佈:2018-07-11
col mos 輸出 lin 存儲 int file for projects
1.python中的列表不能夠遍歷刪除
1 #python列表我們不能夠遍歷刪除 2 li = [1, 2, 3, 4, 5, 6] 3 for i in range(len(li)): 4 print(i) 5 del li[i] 6 print(li) 7 # 輸出結果: 8 # Traceback (most recent call last): 9 # 0 10 # [2, 3, 4, 5, 6] 11 # File "C:/Users/XZB/PycharmProjects/s1/day7/python註意事項.py", line 5, in <module>12 # 1 13 # del li[i] 14 # [2, 4, 5, 6] 15 # IndexError: list assignment index out of range 16 # 2 17 # [2, 4, 6] 18 # 3
原因:首先,列表是可變類型的數據,我們每進行一次修改,都會在原數據類型上面進行修改,然而for遍歷有一個機制,在第一次時候,它就已經將需要遍歷多少次等相關存儲起來了,所以後面的遍歷不會再判斷需要進行多少次數,所以,在for遍歷刪除列表中的元素的時候,我們沒遍歷一次,列表中的元素都會改變,然而,for遍歷的機制還是最初的那樣子,所以會產生刪除有誤的問題!
2.python中的字典不能夠遍歷刪除
1 dic = {‘k1‘ : ‘v1‘, ‘k2‘ : ‘v2‘, ‘a3‘ : ‘v3‘} 2 for i in dic: 3 print(i) 4 if ‘k‘ in i: 5 del dic[i] 6 #輸出結果:Traceback (most recent call last): 7 # k1 8 # File "C:/Users/XZB/PycharmProjects/s1/day7/python註意事項.py", line 20, in <module> 9# for i in dic: 10 # RuntimeError: dictionary changed size during iteration
如果我們將不含有k的鍵值對打印出來,有如下兩種方法:
1 #方法一 2 dic = {‘k1‘ : ‘v1‘, ‘k2‘ : ‘v2‘, ‘a3‘ : ‘v3‘} 3 dic1 = {} 4 for i in dic: 5 if ‘k‘ not in i: 6 dic1.setdefault(i, dic[i]) 7 dic = dic1 8 print(dic) 9 10 #方法二 11 l = [] 12 dic = {‘k1‘ : ‘v1‘, ‘k2‘ : ‘v2‘, ‘a3‘ : ‘v3‘} 13 for i in dic: 14 if ‘k‘ in i: 15 l.append(i) 16 17 for i in l: 18 del dic[i] 19 20 print(dic)
python中列表,字典等必須要註意的事項