python中的循环迭代

您所在的位置:网站首页 python中的static python中的循环迭代

python中的循环迭代

#python中的循环迭代| 来源: 网络整理| 查看: 265

python中的循环迭代 iter() 作用于可迭代对象(list, dict)尝试返回一个迭代器(迭代器本身也是可迭代对象)。 for循环其实是通过拿到可迭代对象的迭代器并调用next() 1.返回可迭代对象的迭代器 l = ["a", "b", "c"] iter_l = iter(l) # 返回list_iterator object at... m = {"name": "Ted", "age": 30} iter(m) # 返回dict_keyiterator object at... iter(m.items()) # 返回dict_itemiterator object at... next(iter_l) # 返回'a' next(iter_l) # 返回'b' 2.实现迭代器 需要实现 _iter_ 和 _next_方法 class Range7: """生成某个范围内被7整除或者包含7的数字""" def __init__(self, start, end): self.start = start self.end = end def __iter__(self): # 返回迭代器对象 return Range7Iterator(self) class Range7Iterator: def __init__(self, range_obj): self.range_obj = range_obj self.current = range_obj.start def __iter__(self): return self def __next__(self): while True: if self.current >= self.range_obj.end: raise StopIteration if self.num_is_valid(self.current): ret = self.current self.current += 1 return ret self.current += 1 def num_is_valid(self, num): if num == 0: return False return num % 7 == 0 or '7' in str(num) r = Range7(0, 50) tuple(r) 3.生成器修饰可迭代对象 生成器这里的作用是包裹迭代逻辑,进行过滤筛选啥的 def even_only(numbers): for num in numbers: if num % 2 == 0: yield num for i in even_only(range(100)): print(i) 4.itertools模块优化循环

1)product()扁平化多层嵌套循环

为了简化嵌套循环,接收多个可迭代对象,然后根据笛卡尔积生成结果。 from itertools import product list(product([1,2], [3,4])) # 返回[(1, 3), (1, 4), (2, 3), (2, 4)] # 大大简化嵌套循环 for i, j, k in product(range(10), range(20), range(30)): if i + j + k == 20: print(i, j, k)

2)islice()循环内隔行处理

比如想处理1、3、5、7、9....奇数行的数据 # islice(seq, start, end, step) 序列,开始行,结束行,步长 with open(filename, 'r') as fp: for i, line in islice(fp, 1, None, 2): # 从第1行开始处理,直到空行,步长2(隔1行处理) yield line.strip()

3)使用takewhile()替代break

for user in users: if not is_qualified: break # 业务代码处理逻辑... # 以上代码可以写成: # takewhile(predicate, literable) 参数:真值测试,迭代对象。即迭代对象满足predicate真值测试才会迭代 from itertools import takewhile for user in takewhile(is_qualified, users): # 业务代码处理逻辑... 5.for循环中的else语句

循环没有被break终止的话else语句就会被执行

for i in range(20): if i > 20: break print(i) else: print("没有大于20的数字")


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3