今天在使用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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!