python如何实现反向迭代
作者:北门吹雪 发布时间:2023-05-17 17:37:55
标签:python,反向迭代
本文实例为大家分享了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)
来源:http://www.cnblogs.com/2bjiujiu/p/7248827.html


猜你喜欢
- 可以,具体方法如下::<% set fs=createobject("scripting.
- 本例设置为垂直左侧scroll主要思想是利用一个长度为0的mid_frame,高度为待设置qwidget的高度,用mid_frame的mov
- 本来想把之前对artTemplate源码解析的注释放上来分享下,不过隔了一年,找不到了,只好把当时分析模板引擎原理后,自己尝试写下的模板引擎
- 哪个Python版本?当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3
- 使用 Python 对数据进行更新操作对于 es 的更新的操作,不用到 Search() 方法,而是直接使用 es 的连接加上相应的函数来操
- 学了一天pygame,用python和pygame写一个简单的挡板弹球游戏GitHub:EasyBaffleBallGame# -*- co
- 前言ThinkPHP 3.2 基于 ThinkPHP 3.1 的基础上有许多的变化,我觉得这个版本应该设立为 ThinkPHP 4.0 而不
- 不知道大家有没发现DWMX中有一个和FW差不多的制作弹出菜单功能?这个功能允许用文字和图片做为主菜单,如果用文字的话要先做虚拟链接。下面简单
- 背景基于现在微服务或者服务化的思想,我们大部分的业务逻辑处理函数都是长这样的:比如grpc服务端:func (s *Service) Get
- 1、标识符与关键字在了解数据类型之前,先了解一下go的标识符和关键字1.1 标识符在编程语言中标识符就是定义的具有某种意义的词,比如变量名、
- 问题背景:本来想写一个脚本来处理硬盘里的文件,并进行分类处理,但是发现一个问题,使用python内置os模块里的方法出现一些问题,具体的见示
- 1、首先计算MD5加密的二进制数组(128位),然后再对这个二进制数组进行base64编码(而不是对32位字符串编码)。例如,用Python
- HTML 的拖放 API 依赖 DOM 事件模型,获取拖放和放置元素的相关信息,以此实现拖放功能。我们只需要注册很少几个事件 * ,就能把任
- Appium在前文的讲解中,我们学会了如何安装Appium,以及一些基础获取App元素内容的方式。但认真看过前文的读者,肯定在博主获取元素的
- CSS3草案中定义了{opacity:来声明元素的透明度,这已经得到了大多数现代浏览器的支持,而IE则很早通过特定的私有属性filter来实
- 废话不多说,直接上代码<?php // 暂不支持断点续传 // $url = 'http://www.
- Oracle SQL语句中的Update可以和SEQUENCE联合使用,以达到更新某字段的值连续编号,而不需要使用游标去逐条遍历更新数据库记
- 目录完整项目地址:简介功能商家端顾客端服务器端主要代码完整项目地址:https://github.com/kongxiangchx/Shop
- 方法1: X:\oracle\ora81\bin\wrap iname=XXX oname=XXX 方法2:9i在win2000下使用wra
- 需要转载的小伙伴转载后请注明转载的地址需要用到的库from bs4 import BeautifulSoupimport requestsi