python3 迭代

可以直接作用於for循環的對象統稱爲可迭代對象(Iterable)。

可以被next()函數調用並不斷返回下一個值的對象稱爲迭代器(Iterator)。

所有的Iterable均可以通過內置函數iter()來轉變爲Iterator。

 

例1:

myTree = {'有自己的房子': {0: {'有工作': {0: 'no', 1: 'yes'}}, 1: 'yes'}}
firstStr = next(iter(myTree))

當使用next()調用到最後會拋出StopIteration錯誤表示無法繼續返回下一個值了。

 

例如上例myTree是一個可迭代對象,調用iter()可轉化爲 迭代器,再使用next()遍歷

例2:next()使用舉例

list2 = [11,22,33]
list2=iter(list2)
print(next(list2),next(list2),next(list2))

完成遍歷

例3:

Parameters:
    myTree - 決策樹
Returns:
    numLeafs - 決策樹的葉子結點的數目
Author:
    Jack Cui
Blog:
    http://blog.csdn.net/c406495762
Modify:
    2017-07-24
"""
def getNumLeafs(myTree):
    numLeafs = 0                                                #初始化葉子
    firstStr = next(iter(myTree))                            #python3中myTree.keys()返回的是dict_keys,不在是list,所以不能使用myTree.keys()[0]的方法獲取結點屬性,可以使用list(myTree.keys())[0]
    secondDict = myTree[firstStr]                                #獲取下一組字典
    for key in secondDict.keys():
        if type(secondDict[key]).__name__=='dict':                #測試該結點是否爲字典,如果不是字典,代表此結點爲葉子結點
            numLeafs += getNumLeafs(secondDict[key])
        else:   numLeafs +=1
    return numLeafs

採用遞歸統計決策樹的葉節點個數

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章