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
时间: 2024-10-28 19:59:09

Python3 From Zero——{最初的意识:004~迭代器和生成器}的相关文章

Python3 From Zero——{最初的意识:000~Initial consciousness『REVIEW』}

a.编码默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串,也可以为源码文件指定不同的编码:# -*- coding: cp-1252 -*- b.python保留字 保留字即关键字,我们不能把它们用作任何标识符名称.Python的标准库提供了一个keyword module,可以输出当前版本的所有关键字: >>> import keyword >>> keyword.kwlist ['False', 'None', 'T

Python3 From Zero——{最初的意识:数据结构和算法}

一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2],maxlen=3) a.appendleft(3) [3, 1, 2] a.appendleft(4) [4, 3, 1] a.popleft() [3, 1] 二.求队列中最大或最小的N个元素 思路1:heapq.nlargest(N, iterable, key=None).heapq.nsm

Python3 From Zero——{最初的意识:006~数据编码与处理}

一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: f_csv = csv.DictReader(f) for x in f_csv: print(x) if x['货物名称'] == '电机': break [email protected] ~/py_script $ python3 csv_test.py {'开单网点组织编号': 'C0502

Python3 From Zero——{最初的意识:015~初级实例演练}

一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" color_1="\033[46m \033[00m" def line(a, b): for i in range(0,48): if ((i // 8) % 2) == 0: print(a, end='') else: print(b, end='') for x in range(0,

Python3 From Zero——{最初的意识:007~函数}

一.编写可接受任意数量参数的函数:*.** >>> def test(x, *args, y, **kwargs): ... pass ... >>> test(1, 2, 3, 4 ,5 ,5, y=9, aa=99, bb=88,cc=900) >>> test(1, 2, 3, 4 ,5 ,5, 9, aa=99, bb=88,cc=900) Traceback (most recent call last): File "<st

python014 Python3 迭代器与生成器

Python3 迭代器与生成器迭代器迭代是Python最强大的功能之一,是访问集合元素的一种方式..迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退.迭代器有两个基本的方法:iter() 和 next().字符串,列表或元组对象都可用于创建迭代器:实例(Python 3.0+) >>>list=[1,2,3,4] >>> it = iter(list) # 创建迭代器对象 >>&g

python3 迭代器与生成器

pythom3 迭代器与生成器 迭代器'''迭代器是python最强大的功能之一,是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置对象迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问玩结束.迭代器只能往前不会后退.迭代器有两个基本方法:iter()和next().字符串,列表或元组对象都可用于创建迭代器: ''' list=[1,2,6,3] it=iter(list)#创建迭代器对象 print(next(it))#结果1 print(next(it))#结果2 print(

第四周Python--装饰器(迭代器、生成器)

---恢复内容开始--- 上节回顾: 编码:Python3中默认的是unicode,Python2中默认的是ASCII 区分:局部变量和全局变量 递归的特点: 1)规模减少 2)明确结束条件 3)效率低 函数式编程,不会有副作用,传递什么值就会有什么结果. 本节内容: 1.迭代器和生成器 2.装饰器 3.Json和Pickle序列化 4.软件目录结构规范 5.作业:ATM 1.迭代器&生成器 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束

Python 函数式编程之迭代器、生成器及其应用

python 标准库中提供了 itertools, functools, operator三个库支持函数式编程,对高阶函数的支持,python 提供 decorator 语法糖. 迭代器 (iterator)和生成器(generator)概念是 python 函数式编程的基础,利用迭代器和生成器可以实现函数式编程中经常用到的 map(), filter(), reduce() 等过程以及 itertools, functools 中提供的绝大部分功能. 1.迭代器和生成器基础(next, ite