python3 迴圈遍歷一次map之後,map為空

2021-08-29 02:41:53 字數 1232 閱讀 9844

今天在跟敲書本**的時候,發現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中的元素,都會導致迭代器從頭走到尾(可以模擬list[0]到list[n])。 而迭代器是乙個單向的容器,走到尾部之後,不會自動再回到開始位置。 所以,對map物件進行一次for迴圈之後,map就相當於「空」了。

想要二次遍歷(訪問)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模組。輸出結果如下:

至此,此問題就可以得到解決了。

方法參考:

1: 2:

python3第一次作業

需要乙個檔案users,裡面有使用者名稱密碼以及是否鎖定的識別符號 lzd 123 1 wdl 123 0 lw 123 0 aaa 123 0 bbb 123 0 ccc 123 1 ddd 123 0 eee 123 0 fff 123 0 ggg 123 0 hhh 123 0 adc 123...

python3第一次作業

需要乙個檔案users,裡面有使用者名稱密碼以及是否鎖定的識別符號 lzd 123 1 wdl 123 0 lw 123 0 aaa 123 0 bbb 123 0 ccc 123 1 ddd 123 0 eee 123 0 fff 123 0 ggg 123 0 hhh 123 0 adc 123...

Python3迴圈結構(一)for迴圈

python3迴圈結構 在python中主要有兩種型別的迴圈結構 for迴圈和while迴圈。for迴圈一般用於有明顯邊界範圍的情況,例如,計算1 2 3 4 5 100等於幾的問題,就可以用for迴圈求解。while迴圈一般應用於迴圈次數難以確定的情況。下面分別介紹這兩種迴圈結構。for迴圈 通常...