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