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) #当 ...
随机推荐
- 思维构造+匹配——cf1199E
直接枚举每条边,如果边加到图中后还是个匹配图,就直接加,反之就不加 这样加完所有边后,剩下的点必定可以组成一个独立集:因为如果剩下的点中还有互相匹配的,那么这对点应该在加边时就被算到匹配图中 所以要么 ...
- 原生js 与 jQuery对比
1.原生JS与jQuery操作DOM对比 : https://www.cnblogs.com/QianBoy/p/7868379.html 2.比较jQuery与JavaScript的不同功能实 ...
- vue中的toast组件
首先在components新建组件文件夹 随后在toast.vue中写入弹框样式 <template> <transition name="demo"> & ...
- 汇编检测OD代码
repnz指令说明:重复执行其后面的指令,CX或ECX存放最多比较次数,DI或EDI存放查找表首地址,AL或AX或EAX存放想查找的内容.当(CX或ECX)= 0 或 ZF=1 退出重复,否则,(CX ...
- 【Shiro】一、Apache Shiro简介
一.Apache Shiro简介 1.简介 一个安全性框架 特点:功能丰富.使用简单.运行独立 核心功能: Authentication(认证):你是谁? Authorization(授权):谁能干什 ...
- http://elasticsearch-py.readthedocs.io/en/master/api.html
API Documentation All the API calls map the raw REST api as closely as possible, including the disti ...
- yum 快速LAMP/LNMP 安装(centos7+mysql5.7+apache+php5.6 (缺点:好多模块没有加载)
1.安装Apache 安装centos7默认自带(Apache2.4.6)版本 yum -y install httpd 2.开启apache服务 systemctl start httpd.serv ...
- 词表征 1:WordNet、0-1表征、共现矩阵、SVD
原文地址:https://www.jianshu.com/p/c1e4f42b78d7 一.基于知识的表征 参见图1.1,WordNet中包含同义词集(synonym sets)和上位词(hypern ...
- 列表分成N等份
将一个长列表分为N个短列表 def Equal_division_list(eq_list, n): ''' :param seq:传入的列表 :param n:划分的份数,几等分 :return:返 ...
- react map循环数据 死循环
项目条件:react es6 antidesign 已在commonState中获取到list,但是在循环map填充DOM的时候陷入死循环. 原因:因为是子组件 ,在父组件请求数据的时候 有个时差过程 ...