python 基礎教程之迭代

python的迭代相當的強大,也非常的好用。

迭代:

簡單迭代:

最常見的迭代也就是for循環了

for i in range(10)
      print i
它可以遍歷列表,元組,字典

並行迭代:

names = ['anna', 'beth', 'tom']
ages  = ['19', '24', '27']
for name,age in zip(names,ages)
      print name,' is ',age,' years old!'

列表推導式:

列表推導式是用列表創建新列表

比如:

[ x*x for x in range(4)]  #[0, 1, 4, 9]
[ x*x for x in range(4) if x%3 == 0]  #[0, 9, 36, 81]
[ (x,y) for x in range(2) for y in range(2)] #[(0,0), (0,1), (1,0), (1,1)]

迭代器:

迭代器,實現__iter__特殊方法是可迭代,實現了next則是迭代器,不只在元組和字典中,而且更優雅,更推薦

class fibs:
    def __init__(self):
        self.a = 1
        self.b = 1

    def next(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > 27000:raise StopIteration #------------從迭代器中得到序列
        return self.a

    def __iter__(self):
        return self

if __name__ == '__main__':

    fibs = fibs()
    for f in fibs:
        print f

    fList = list(fibs) #使用list將迭代器轉化爲列表
    print fList

    #對於內建的iter函數,可以從對象中獲取元素,實例
    it = iter([5, 6, 1, 2, 9])
    print it.next()
    print it.next()

生成器:

任何包含yield語句的函數被稱爲生成器,它不像return那樣返回值,而是每次產生多個值,每次產生一個值,函數就會被凍結:即函數停在那點等待被激活,函數被激活後就從停止的那點開始執行。(類似中斷)

看實例:

def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element

nested = [[3, 4], [1, 5], [2]]
for num in flatten(nested):
    print num                  # 輸出 3 4 1 5 2

遞歸生成器:

def flatten(nested):
   try:
       for sublist in nested:
           for element in flatten(sublist):
              yield element
   except TypeError:
        yield mested

nested = [[3, [7, [4,[8]]]], [1, 5], [2]]
for num in flatten(nested):
    print num                  # 輸出 3 7 4 8 1 5 2






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