今天在跟敲書本**的時候,發現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物件之前,先複製拷貝乙份,但此時的拷貝需要是深拷貝才行。
所以**應該修改如下:
在使用deepcopy函式之前,需引入copy模組。輸出結果如下: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)
至此,此問題就可以得到解決了。
方法參考:
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迴圈 通常...