1. 程式人生 > >【轉】python3 內迴圈中遍歷map,遍歷一遍後再次進入內迴圈,map為空

【轉】python3 內迴圈中遍歷map,遍歷一遍後再次進入內迴圈,map為空

今天在使用python map的過程中,發現了一個奇怪問題,map遍歷完成後,再次訪問map,發現map為空了,特記錄下來,以備日後檢視。

如下程式碼,期望的結果是每次從外迴圈進入內迴圈,map都從頭開始進行遍歷,但事實卻不是這樣,下面為程式碼:

outData = [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
outDataMap = map(set, outData)
data = [[1],[2],[3],[4],[5]]
dataMap = map(set, data)
for outElem in outDataMap:
print('outElem:', outElem)
for innElem in dataMap:
print('innElem:', innElem)

實際執行結果是:
outElem: {1, 3, 4}
    innElem: {1}
    innElem: {2}
    innElem: {3}
outElem: {2, 3, 5}
outElem: {1, 2, 3, 5}
期望結果是:
outElem: {1, 3, 4}
    innElem: {1}
    innElem: {2}
    innElem: {3}
outElem: {2, 3, 5}
    innElem: {1}
    innElem: {2}
    innElem: {3}
outElem: {1, 2, 3, 5}
    innElem: {1}
    innElem: {2}
    innElem: {3}
產生這種差異的原因在於:遍歷完最後一個元素後,再次訪問時會放回空列表

為了能持續正確的訪問資料,需要將map list() 之後存在另外一個變數中。

正確程式碼如下:

outData = [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5]]
outDataMap = map(set, outData)
data = [[1],[2],[3]]
dataMap = map(set, data)
dataList = list(dataMap)
for outElem in outDataMap:
print('outElem:', outElem)
for innElem in dataList:

---------------------
作者:飛鷹_天涯
來源:CSDN
原文:https://blog.csdn.net/kairen6645/article/details/80252824
版權宣告:本文為博主原創文章,轉載請附上博文連結!