Python3 From Zero——{最初的意识:004~迭代器和生成器}
一、反向迭代:reversed()
>>> a
[1, 2, 3, 4]
>>> for x in reversed(a):
... print(x, end=' ')
...
4 3 2 1
#反向迭代只有在待处理的对象具有确定的大小或者对象实现了__reversed()__特殊方法时才能奏效,否则必须先将对象转化为列表(可能消耗大量内存)
>>> with open('/etc/passwd', 'rt') as file:
... for x in reversed(file): #要用list(file)
... print(x)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: argument to reversed() must be a sequence
二、迭代器切片:itertools.islice
import itertools
>>> def count(n):
... while True:
... yield n
... n += 1
...
>>> for x in itertools.islice(count(0), 2, 10): #相当于列表切片取[2:10]
... print(x, end=' ')
...
2 3 4 5 6 7 8 9
>>>for x in itertools.islice(count(0), 5, None): #相当于列表切片取[5:]
... print(x, end=' ')
... if x >10:
... break
...
5 6 7 8 9 10
>>> for x in itertools.islice(count(0), 5): #相当于列表切片取[:5]
... print(x, end=' ')
...
0 1 2 3 4
#迭代器和生成器无法进行普通的切片操作(其长度不确定且没有实现索引),islice会产生一个新迭代器,消耗掉初始迭代序列中的所有数据
三、以索引-值对的形式迭代序列:enumerate
>>> a
[1, 2, 3, 4]
>>> for index, value in enumerate(a, 1): #从1开始计数,语法:enumerate(iterable[, start])
... print(index, value)
...
1 1
2 2
3 3
4 4
#enumerate的返回值是一个迭代器,元素是元组
四、同时迭代多个序列
并行成对迭代:zip()、itertools.zip_longest()
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4, 8, 9]
>>> for x, y in zip(a, b):
... print(x, y)
...
1 1
2 2
3 3
4 4
>>> for x, y in itertools.zip_longest(a, b):
... print(x, y)
...
1 1
2 2
3 3
4 4
None 8
None 9
>>> for x, y in itertools.zip_longest(a, b, fillvalue=0):
... print(x, y)
...
1 1
2 2
3 3
4 4
0 8
0 9
串行顺序迭代:itertools.chain()
>>> for x in itertools.chain(a, b):
... print(x)
...
1
2
3
4
1
2
3
4
8
9
串行交叉迭代:heapq.merge()
>>> import heapq
>>> for x in heapq.merge(a, b):
... print(x)
...
1
1
2
2
3
3
4
4
8
9
Python3 From Zero——{最初的意识:004~迭代器和生成器}的更多相关文章
- python--3、 可迭代对象、迭代器、生成器
可迭代对象 iterable 可直接作用于for循环的对象统称为可迭代对象. 有 list. dict.tuple.set.str等数据类型,还有 generator(包括生成器和带yield的gen ...
- Python3 From Zero——{最初的意识:000~Initial consciousness}
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 a.编码 默认情况下,Python ...
- Python3 From Zero——{最初的意识:008~初级实例演练}
一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...
- Python3 From Zero——{最初的意识:006~数据编码与处理}
一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: ...
- Python3 From Zero——{最初的意识:002~字符串和文本}
一.使用多个界定符分割字符串 字符串.split(',')形式只适用于单一分割符的情况:多分割符同时应用的时候,可使用re.split() >>> line = 'asdf fjdk ...
- Python3 From Zero——{最初的意识:001~数据结构和算法}
一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2] ...
- Python3 From Zero——{最初的意识:007~函数}
一.编写可接受任意数量参数的函数:*.** >>> def test(x, *args, y, **kwargs): ... pass ... >>> test(1 ...
- Python3 From Zero——{最初的意识:005~文件和I/O}
一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...
- Python3 From Zero——{最初的意识:003~数字、日期、时间}
一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...
随机推荐
- django_websocket实现简单聊天室
一.安装模块 pip install channels pip install channels-redis 二.代码 #websocket_v1/settings.py INSTALLED_APPS ...
- windows系统使用
1.访问局域网共享的文件,用 \\ip号 2.电脑的硬件名称(设备管理器中)是可以用软件修改的. 3.电脑中每一个连接网络的设备都有一个网卡地址(MAC地址),如无线网卡地址.有线网卡地址. 4.wi ...
- 制作linux根文件系统
转载地址:http://wenku.baidu.com/view/2cb1b4707fd5360cba1adb14.html 2011十一月 24 转 嵌入式根文件系统制作 (3985) (0) 转自 ...
- CSS:CSS 导航栏
ylbtech-CSS:CSS 导航栏 1.返回顶部 1. CSS 导航栏 导航栏 熟练使用导航栏,对于任何网站都非常重要. 使用CSS你可以转换成好看的导航栏而不是枯燥的HTML菜单. 导航栏=链接 ...
- 用 Flask 来写个轻博客 (1) — 创建项目
目录 目录 前言 扩展阅读 部署开发环境 创建 Github 项目 前言 一步一步的实现一个 Flask 轻博客项目启动,最新的代码会上传到 Github. 扩展阅读 欢迎使用 Flask - vir ...
- Awesome Adb——一份超全超详细的 ADB 用法大全
https://github.com/mzlogin/awesome-adb https://www.cnblogs.com/bravesnail/articles/5850335.html ...
- centos7.2下快速安装zabbix4.0
本笔记是基于CentOS 7.2下最小化安装的操作系统搭建的Zabbix4.0环境,主要用于做一些企业路由器和交换机等设备的运行状态监控. 1.安装epel源 yum -y install epel- ...
- 【非官方方式】获取Disconf动态更新的配置文件的值
disconf可以配置reload,当更改配置时自动刷新classpath下的配置文件.然而获取最新的值官方说明是加@DisconfFileItem注解放在属性的方法上,底层通过拦截器获取的. 但是每 ...
- Java全栈,MySQL搞透,架构手到擒来,还有面试官搞不定?
五月最后一天啦,时间过得真快,做技术的难免做了几年就感觉很迷茫,那就需要多读点书,多学点技术才能有安全感. 栈长之前推荐过不少极客时间的课程,几乎每周都推荐一个,很多朋友评论说,课程太多学不过来,今天 ...
- hdu6315 /// 线段树区间更新
题目大意: 给定n q 为序列的个数和操作的个数 给定n个数的序列b[]作为分母 初始全为0的序列a[]作为分子 两种操作 add l r 为a[]的l到r区间全部+1 query l r 为查询l到 ...