1. 程式人生 > >python中列表,字典等必須要註意的事項

python中列表,字典等必須要註意的事項

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中列表,字典等必須要註意的事項