Python 如何反方向迭代一个序列


Posted in Python onJuly 28, 2020

问题

你想反方向迭代一个序列

解决方案

使用内置的 reversed() 函数,比如:

>>> a = [1, 2, 3, 4]
>>> for x in reversed(a):
...   print(x)
...
4
3
2
1

反向迭代仅仅当对象的大小可预先确定或者对象实现了 __reversed__() 的特殊方法时才能生效。如果两者都不符合,那你必须先将对象转换为一个列表才行,比如:

# Print a file backwards
f = open('somefile')
for line in reversed(list(f)):
  print(line, end='')

要注意的是如果可迭代对象元素很多的话,将其预先转换为一个列表要消耗大量的内存。

讨论

很多程序员并不知道可以通过在自定义类上实现 __reversed__() 方法来实现反向迭代。比如:

class Countdown:
  def __init__(self, start):
    self.start = start

  # Forward iterator
  def __iter__(self):
    n = self.start
    while n > 0:
      yield n
      n -= 1

  # Reverse iterator
  def __reversed__(self):
    n = 1
    while n <= self.start:
      yield n
      n += 1

for rr in reversed(Countdown(30)):
  print(rr)
for rr in Countdown(30):
  print(rr)

定义一个反向迭代器可以使得代码非常的高效,因为它不再需要将数据填充到一个列表中然后再去反向迭代这个列表。

以上就是Python 如何反方向迭代一个序列的详细内容,更多关于Python 反向迭代的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
多个应用共存的Django配置方法
May 30 Python
详解Python字典的操作
Mar 04 Python
python dlib人脸识别代码实例
Apr 04 Python
django和vue实现数据交互的方法
Aug 21 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
Pytorch模型转onnx模型实例
Jan 15 Python
Python实现FLV视频拼接功能
Jan 21 Python
python中字典增加和删除使用方法
Sep 30 Python
python中pickle模块浅析
Dec 29 Python
Python Matplotlib简易教程(小白教程)
Jul 28 #Python
Python把图片转化为pdf代码实例
Jul 28 #Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 #Python
Python 合并拼接字符串的方法
Jul 28 #Python
Python reques接口测试框架实现代码
Jul 28 #Python
如何用Matplotlib 画三维图的示例代码
Jul 28 #Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 #Python
You might like
php中去除所有js,html,css代码
2010/10/12 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
js html实现计算器功能
2018/11/13 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
python实现中文分词FMM算法实例
2015/07/10 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
TensorFlow实现创建分类器
2018/02/06 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
python3学生名片管理v2.0版
2018/11/29 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
金融事务专业求职信
2014/04/25 职场文书
岗位职责说明书模板
2014/07/30 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
二手车转让协议书
2015/01/29 职场文书