Python3 3-4_5_6
3-4构造反向序列; 3-5对迭代器做切片操作;3-6一次遍历多个可迭代对象
# -*- coding: utf-8 -*- """ 构造反向序列: a = [1,2,3,4,5,6] a.reverse() # 改变了原列表 a[::-1] # 生成了与原列表一样大的 reversed(a) #使用reversed()函数实际调用__reversed__ method. 我们构造一个可迭代对象,定义其__reversed__method,就可以对其使用 reversed() """ class FloatRange: def __init__(self, start, end, step = 0.1): self.start = start self.end = end self.step = step #正向迭代方法 def __iter__(self): out_k = self.start while out_k < self.end: yield out_k out_k += self.step #反向迭代使用reversed()调用该方法 def __reversed__(self): out_k = self.end while out_k > self.start: yield out_k out_k -= self.step for i in FloatRange(1.0, 4.0, 0.5): print(i) for i in reversed(FloatRange(1.0, 4.0, 0.5)): print(i) #Q:flost 精度问题?
---------------------------------------
# -*- coding: utf-8 -*- """ 对迭代器做切片操作 """ f = open('D://Work/PANCAN_clinicalMatrix') #lines = f.readlines() #一次读取全部到列表 #f.seek(0) #文件指针返回头部 from itertools import islice #文件f是一个iterable, 利用islice()返回iterator f_iterator = islice(f, 1000,1020) for x in f_iterator : print(x)
--------------------------------------
# -*- coding: utf-8 -*- """ 在一个for循环语句中迭代多个可迭代对象 """ from random import randint chinese = [randint(60,100) for _ in range(20)] math = [randint(60,100) for _ in range(20)] english = [randint(60,100) for _ in range(20)] ## 利用index迭代,但是iterator不可以用index #for i in range(len(chinese)): # chinese[i] + math[i] + english[i] ## 利用zip函数 total = [] for c, m, e in zip(chinese, math, english): total.append(c + m + e) ## chain 能够将多个iterator 连接到一起来迭代 from itertools import chain print('#############') for x in chain(chinese, math, english): if x > 95: print(x)
-------------------