python3 迴圈遍歷一次map之後,map為空
阿新 • • 發佈:2019-01-29
今天在跟敲書本程式碼的時候,發現map型別的變數經過一次for迴圈遍歷之後,裡面的元素都沒有了,找了一些資料,特此記錄,以作備忘。
我們常常會寫類似於這樣的程式碼:
dataSet = [[1,3,4],[2,3,5],[1,2,3,5],[2,5]]
num = 0
D = map(set,dataSet)
for tid in D:
num += 1
SS = list(D)
print(SS)
我們通常想要的輸出會是這樣的:
但實際上是這樣的:
之所以會這樣,原因在於:遍歷完最後一個元素後,再次訪問時會放回空列表。我們也可以這樣理解:由於python中“沒有指標,但是所有物件均為指標”,完成一次遍歷後指標會移到最後一個元素上了。也就是說,D是一個map object,print(list(D))或者for迴圈列印D中的元素,都會導致迭代器
想要二次遍歷(訪問)Map物件,這裡有一種方法可供參考:
------在第一次遍歷Map物件之前,先複製拷貝一份,但此時的拷貝需要是深拷貝才行。
所以程式碼應該修改如下:
import copy dataSet = [[1,3,4],[2,3,5],[1,2,3,5],[2,5]] num = 0 D = map(set,dataSet) DD = copy.deepcopy(D) for tid in D: num += 1 SS = list(DD) print(SS)
在使用deepcopy函式之前,需引入copy模組。輸出結果如下:
至此,此問題就可以得到解決了。
方法參考: