標籤:int err 改變 輸出 during time pycharm ast pyc
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 # 010 # [2, 3, 4, 5, 6]11 # File "C:/Users/XZB/PycharmProjects/s1/day7/python注意事項.py", line 5, in <module>12 # 113 # del li[i]14 # [2, 4, 5, 6]15 # IndexError: list assignment index out of range16 # 217 # [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中列表,字典等必須要注意的事項