给定一个对象,可以通过for...in循环来遍历,称这种遍历方式为迭代。
实列:不同对象的迭代:
from collections.abc import Iterable print("----------迭代list----------") iter_list_demo = [‘语文‘, ‘数学‘, ‘英语‘, ‘政治‘] for key in iter_list_demo: print(key) print("----------迭代tuple----------") iter_tuple_demo = (‘华为‘, ‘小米‘, ‘一加‘, ‘vivo‘) for key in iter_tuple_demo: print(key) print("----------迭代dict----------") iter_dict_demo = {‘小红‘: 99, ‘小花‘: 98, ‘小明‘: 97, ‘小白‘: 100} for val in iter_dict_demo.values(): # 迭代的是value print(val) # 只输出value值 for key, value in iter_dict_demo.items(): # 迭代的是key和value print(key, ":", value) print("------------迭代str--------") iter_str_demo = "ABCDE12345" for key in iter_str_demo: print(key)
判断元素是否可以迭代,使用collections模块的Iterable
from collections.abc import Iterable a = ‘abcdef‘ b = [1, 2, 3, 4, 5, 6] c = 123 print(isinstance(a, Iterable)) # true print(isinstance(b, Iterable)) # true print(isinstance(c, Iterable)) # false 整数不可以迭代
迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本方法: iter()和next()
list_demo = [1, 2, 3, 4, 5] print(‘是否可迭代:%s‘ % isinstance(list_demo, Iterable)) it = iter(list_demo) # 创建迭代器对象 # 迭代器对象可以使用常规for进行遍历 for x in it: print(x, end=" ") # 为end传递一个空字符串,这样print函数不会在字符串末尾添加一个换行符,而是添加一个空字符串
list_demo = [1, 2, 3, 4, 5] it = iter(list_demo) # 创建迭代器对象 # 用next()函数进行遍历 for循环就是不断的调用next函数 while True: try: print(next(it), end=" ") except StopIteration: break
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator。
使用了 yield 的函数被称为生成器(generator),生成器是一个返回迭代器的函数,只能用于迭代操作,生成器就是一个迭代器。
调用一个生成器函数,返回的是一个迭代器对象。
[]
改成()
,就创建了一个generator:L = [x * x for x in range(11)] g = (x * x for x in range(11)) print("L:", type(L)) print("g:", type(g))
使用for循环来遍历生成器对象
g = (x * x for x in range(11)) for n in g: print(n, end=" ")
yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator:变成generator的函数,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行。
实例:使用生成器计算斐波拉契数列
def fib_test3(num): a, b = 0, 1 while num > 0: a, b = b, a+b # t = (b, a + b) t是一个tuple a = t[0] b = t[1] num -= 1 yield a for i in fib_test3(20): print(i, end=" ") print("\n")
def fib_test4(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return ‘done‘ for x in fib_test4(15): print(x, end=" ")
原文:https://www.cnblogs.com/rissa/p/14892813.html