更多编程教程请到:菜鸟教程 https://www.piaodoo.com/

友情链接:好看站 http://www.nrso.net/

问题

你想反方向迭代一个序列

解决方案

使用内置的 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 反向迭代的资料请关注菜鸟教程www.piaodoo.com其它相关文章!

Python 如何反方向迭代一个序列相关推荐

  1. Python: 反方向迭代一个序列

    使用内置的reversed()函数 >>> a = [1, 2, 3, 4] >>> for x in reversed(a): ... print(x)out 4 ...

  2. 字符串在Python中的本质是一个序列。 数字类型不是序列,不是可迭代对象,只能看做一个整体不可分割...

    for 变量名 in 序列 字符串是可迭代对象,是序列中的有序序列,即可迭代对象就是有序序列.无序序列(无序的对象)比如字典类型也可用for循环 for item in'我想上青天': print(i ...

  3. python取列表前几个元素_Python下几种从一个序列中取出元素的方法

    使用Python进行数据处理时,有时候会有这样的操作,比如从一个列表或者numpy array中随机取出一个元素,对一个列表中的元素进行shuffle,等等.虽然这些操作也可以通过编写很简短的程序完成 ...

  4. python counter 出现次数最少的元素_[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法...

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  5. python输入三个整数_#python输入一个序列,其中包含表示年,月,日的三个整数,判断这个日期是当年的第几?#...

    python ,获取当前时刻,要求格式为:年月日,时分 am或pm >>> import time >>> print time.strftime("%Y ...

  6. Python(分治算法)问题 F: 求逆序对_给定一个序列a1,a2,…,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目。

    问题 F: 求逆序对 题目描述 给定一个序列a1,a2,-,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目. 注意:n<=10^5,ai<=10^5 ...

  7. 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现

    可迭代对象 首选确保for循环的in后面是一个可迭代对象,这样就能通过python内置函数iter()得到一个迭代器对象(iterator) 我们分别把列表list_test和字符串str_test分 ...

  8. 【3】python核心编程 第六章-序列:字符串、列表和元组

    1.序列类型操作符 1 序列操作符 作用 2 seq[ind] 获得下标为ind 的元素 3 seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合 4 seq * expr 序列 ...

  9. Python基础教程:迭代和解析

    Python中的迭代是指按照元素的顺序逐个调用的过程,迭代概念包括:迭代协议.可迭代对象和迭代器三个概念. 迭代协议是指有__next__()函数的对象会前进到下一个结果,而到达系列的末尾时,则会引发 ...

最新文章

  1. DNS子域委派配置案例[转载]
  2. 【笔记】基于 Mask R-CNN 的玉米田间杂草检测方法
  3. 员外带你读论文:From RankNet to LambdaRank to LambdaMART: An Overview
  4. [转]论SOA架构的几种主要开发方式
  5. java爬虫怎么确定url连接_Java爬虫之抓取一个网站上的全部链接
  6. 音视频技术开发周刊 | 224
  7. SQL语言实现金额小写转大写完整案例代码
  8. 洛谷P1035 [NOIP2002 普及组] 级数求和
  9. 爬虫项目——m3u8后缀的电影
  10. GPCP全球月降水量数据下载与读取
  11. 设计模式之组合模式(十四)
  12. [置顶]       cocos2d-x2.2.5走四棋儿源码“开源”
  13. linux下载git并为git配置连接ssh
  14. NVIDIA驱动重装经历
  15. android显示微博sdk,android微博sdk发图文微博图片不显示35
  16. 皮克定理,多边形面积以及线段上整点个数
  17. MDK5 nRF BLE(蓝牙低功耗)
  18. 机器学习5—分类算法之随机森林(Random Forest)
  19. 我滴python第一周笔记
  20. 竞价排名和php是什么,竞价排名优缺点详解-金瑞帆高端建站

热门文章

  1. Vuex--mapState, mapGetters, mapActions, mapMutations--使用/教程/实例
  2. IP协议详解【IP报文头部结构、IP分片、IP路由、IP转发】
  3. 基于Transformer的NLP智能对话机器人实战课程培训
  4. thinkphp6-学习记录-应用手册
  5. 【抽样技术】CH2 简单随机抽样
  6. python javascript人工智能_Python,Java和JavaScript哪个编程语言未来发展空间更大?...
  7. 涛思数据创始人陶建辉荣获“2020中国开源杰出贡献人物”奖
  8. c语言 指针 pdf,彻底搞定C指针.pdf
  9. 网易2019实习生招聘编程题之数对
  10. java将时间撮转成日期,Java将时间戳转换为日期