#================第四章:迭代器和生成器===================

# 函数 itertools.islice()适用于在迭代器和生成器上做切片操作。

import itertools

def count(n):
while n < 30:
yield n
n += 1 c = count(0)
for x in itertools.islice(c, 10, 20):
print(x) # itertools.dropwhile() 函数
# 给它传递一个函数对象和一个可迭代对 象。
# 它会返回一个迭代器对象,丢弃原有序列中直到函数返回 True 之前的所有元素, 然后返回后面所有元素。 # 遍历一个集合中元素的所有可能的排列或组合
# itertools.permutations() ,它接受一个集合并产生一个元组序列
# 得到指定长度的所有排列,可以传递一个可选的长度参数
from itertools import permutations items = ['a', 'b', 'c']
for item in permutations(items, 2):
print(item) # 使用 itertools.combinations() 可得到输入集合中元素的所有的组合
from itertools import combinations for c in combinations(items, 3):
print(c) # 函数 itertools.combinations with replacement() 允许同一个元素被选择多次
from itertools import combinations_with_replacement
for c in combinations_with_replacement(items, 3):
print(c) # 在迭代一个序列的同时跟踪正在被处理的元素索引
# 内置的 enumerate() 函数可以很好的解决这个问题
my_list = ['a', 'b', 'c']
for idx, val in enumerate(my_list, 1):
print(idx, val)
data = [(1, 2), (3, 4), (5, 6), (7, 8)]
for n, (x, y) in enumerate(data, 1):
print(n, (x, y)) # 同时迭代多个序列,每次分别从一个序列中取一个元素
# 为了同时迭代多个序列,使用 zip() 函数
# 迭代长度跟参数中最短序列长度一致
xpts = ['a', 'b', 'c', 'd']
ypts = [101, 78, 37, 15, 99, 36]
for x, y in zip(xpts, ypts):
print(x, y)
# itertools.zip longest() 函数
from itertools import zip_longest
for i in zip_longest(xpts, ypts, fillvalue='nb'):
print(i) # 在多个对象执行相同的操作
# 使用itertools.chain() 方法
# 接受一个或多个可迭代对象列表作为 输入,并返回一个迭代器
from itertools import chain
zpts = ('one', 'two', 'three')
for xy in chain(xpts, ypts, zpts):
print(xy) # 创建数据处理管道
# 生成器函数是一个实现管道机制的好办法 # 展开嵌套的序列
# 可以写一个包含 yield from 语句的递归生成器
from collections import Iterable def flatten(items, ignore_types=(str, bytes)):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, ignore_types):
yield from flatten(x)
else:
yield x items = [1, 2, [3, 4, [5, 6], 7], 8]
for x in flatten(items):
print(x) # 一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历
# heapq.merge() 函数可以解决这个问题
import heapq a = [1, 4, 7, 10]
b = [3, 5, 6, 11]
c = list(heapq.merge(a, b))
print(c)

Python--进阶处理4的更多相关文章

  1. Python进阶:函数式编程实例(附代码)

    Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...

  2. Python进阶 - 对象,名字以及绑定

    Python进阶 - 对象,名字以及绑定 1.一切皆对象 Python哲学: Python中一切皆对象 1.1 数据模型-对象,值以及类型 对象是Python对数据的抽象.Python程序中所有的数据 ...

  3. Python进阶-继承中的MRO与super

    Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...

  4. Python进阶 - 命名空间与作用域

    Python进阶 - 命名空间与作用域 写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空 ...

  5. python进阶学习笔记(一)

    python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...

  6. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

  7. 【python进阶】Garbage collection垃圾回收2

    前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...

  8. Python进阶 函数式编程和面向对象编程等

    函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...

  9. 【python进阶】深入理解系统进程2

    前言 在上一篇[python进阶]深入理解系统进程1中,我们讲述了多任务的一些概念,多进程的创建,fork等一些问题,这一节我们继续接着讲述系统进程的一些方法及注意点 multiprocessing ...

  10. Python进阶:如何将字符串常量转化为变量?

    前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...

随机推荐

  1. jmx 配置

    1.启动添加jmx参数 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom. ...

  2. 何时应该使用Directive、Controller、Service?

    AngularJS:何时应该使用Directive.Controller.Service? 大漠穷秋 译 AngularJS是一款非常强大的前端MVC框架.同时,它也引入了相当多的概念,这些概念我们可 ...

  3. Java字节码指令

    1. 简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(称为操作数)而构成. 由于Java虚拟机采用面向操作数栈而不是寄存 ...

  4. MFS排错

    [root@Nginx_Master mfs]# /app/server/mfs/sbin/mfsmaster start working directory: /app/server/mfs/var ...

  5. 【转】logstash配置java环境

    1.bin/logstash,新增 JAVA_CMD=/home/admin/soft/jdk1.8.0_121/bin JAVA_HOME=/home/admin/soft/jdk1.8.0_121 ...

  6. Ubuntu安装Nginx和正确卸载Nginx Nginx相关

    1.Ubuntu下安装Nginx比较简单 敲入下列命令即可: sudo apt-get update sudo apt-get install nginx 2.Ubuntu下卸载,稍不注意就会入坑 s ...

  7. FreeRTOS 计数信号量

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节开始讲解 FreeRTOS 任务间的同步和资源共享机制,计数信号量. FreeRTOS 中计数信号量的 ...

  8. python右键不显示IDLE

    打开注册表,在HKEY_CLASSES_ROOT\SystemFileAssociations中添加.py\shell\Edit with IDLE\command(右键 ->‘新建’ -> ...

  9. Windows Phone Unit Test 环境搭建

    单元测试对工程质量带来的作用就不详细说明了,本文只讨论如何在WP开发环境下搭建测试工程     历史 从WP7时代官方是不支持UnitTest工程的,因此需要采用WPToolkitTest这个工程来实 ...

  10. C语言 · 冒泡法排序

    算法提高 冒泡法排序   时间限制:1.0s   内存限制:512.0MB      输入10个数,用“冒泡法”对10个数排序(由小到大)这10个数字在100以内. 样例输入 1 3 6 8 2 7 ...