代碼:
dataSet = [ [1], [2],[3]]
D = map( set, dataSet )
for i in D:
print ( i )
for i in D:
print ( i )
運行結果:
{1}
{2}
{3}
第2次怎么就不能迭代了呢?
uj5u.com熱心網友回復:
我這里可以啊 兩次
>>>
set([1])
set([2])
set([3])
set([1])
set([2])
set([3])
uj5u.com熱心網友回復:
我python版本是V3.4, 很多V2的程式都要調整,很奇怪啊uj5u.com熱心網友回復:
for回圈是基于迭代器協議uj5u.com熱心網友回復:
之所以會這樣,原因在于:遍歷完最后一個元素后,再次訪問時會放回空串列。我們也可以這樣理解:由于python中“沒有指標,但是所有物件均為指標”,完成一次遍歷后指標會移到最后一個元素上了。也就是說,D是一個map object,print(list(D))或者for回圈列印D中的元素,都會導致迭代器從頭走到尾(可以類比list[0]到list[n])。 而迭代器是一個單向的容器,走到尾部之后,不會自動再回到開始位置。 所以,對Map物件進行一次for回圈之后,Map就相當于“空”了。想要二次遍歷(訪問)Map物件,這里有一種方法可供參考:
------在第一次遍歷Map物件之前,先復制拷貝一份,但此時的拷貝需要是深拷貝才行。
---------------------
作者:swety_gxy
來源:CSDN
原文:https://blog.csdn.net/swety_gxy/article/details/83063499
著作權宣告:本文為博主原創文章,轉載請附上博文鏈接!
這里有解釋。
uj5u.com熱心網友回復:
因為map()函式的回傳物件不一樣Python 2.x 回傳串列。
Python 3.x 回傳迭代器。
所以你用3.4的版本就只能迭代一次了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/136193.html
