可以直接作用於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
採用遞歸統計決策樹的葉節點個數