您好,登錄后才能下訂單哦!
本文實例為大家分享了python實現反向迭代的具體代碼,供大家參考,具體內容如下
案例:
實現一個連續的浮點數發生器,FloatRange,根據給定范圍(start, end) 和步進值,產生一些列的浮點數,例如:FloatRange(3,4,0.2),將產生下列序列:
正向:3.0 3.2 …… 4.0
反向:4.0 3.8 …… 3.0
如何實現?
方法1:列表翻轉
#!/usr/bin/python3 l = [1, 2, 3, 4, 5, 6] l.reverse() for i in l: print(i) # 出現問題,改變了原列表,不可取
方法2:列表切片
#!/usr/bin/python3 l = [1, 2, 3, 4, 5, 6] for i in l[::-1]: print(i) # 得到了和原列表等大的列表,某種程度上很浪費
方法3: __ reversed__方法
#!/usr/bin/python3 l = [1, 2, 3, 4, 5, 6] for i in reversed(l): print(i)
如何邏輯整理?
for循環正向迭代調用__iter__方法,反向迭代調用__reversed__方法,可以定義一個類,寫上這些方法
#!/usr/bin/python3 class FloatRange(object): def __init__(self, start, end, step): self.dot = self.__get_dot_num(step) # 有多少個小數點就乘以10的多少次冪,因為浮點數運算不準確,換算成整形數進行計算 self.start = start*pow(10, self.dot) self.end = end*pow(10, self.dot) self.step = step*pow(10, self.dot) def __get_dot_num(self, step): # 計算step有多少個小數點 if isinstance(step, int): return step else: # 通過round實現計算有多少位小數,首創 for dot in range(len(str(step))+1): if step == round(step, dot): return dot def __iter__(self): # 正向迭代 while self.start <= self.end: yield self.start/pow(10, self.dot) self.start += self.step def __reversed__(self): # 反向迭代 while self.end >= self.start: yield self.end/pow(10,self.dot) self.end -= self.step if __name__ == '__main__': float_num_1 = FloatRange(2, 5, 0.1) float_num_2 = FloatRange(2, 5, 0.1) # 正向迭代 for i in float_num_1: print(i) print('_'*60) # 反向迭代 for x in reversed(float_num_2): print(x)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。