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

# 函数 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. c#取得post和get的数据和模拟发送

    可以放在控制器的入口函数中,这样载入就会被调用 asp.net mvc,get+post: public ActionResult Index() { ) { foreach (var item in ...

  2. Virtex6 PCIe 超简版基础概念学习(二)

    Virtex6 PCIe 超简版基础概念学习(二) 分类:FPGAPCIe (2081)  (0)  举报  收藏 文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 ise14.7 ...

  3. Python黑魔法,一行实现并行化

    Python 在程序并行化方面多少有些声名狼藉.撇开技术上的问题,例如线程的实现和 GIL,我觉得错误的教学指导才是主要问题.常见的经典 Python 多线程.多进程教程多显得偏“重”.而且往往隔靴搔 ...

  4. SAP R3和JAVA交换数据之JCO

    SAP Java Connector (JCo)     SAP的JAVA中间件,使用它可以使SAP的客户和合作伙伴使用JAVA语言轻松地建立可以和SAP系统通信的兼容的组件和应用程序下面是JCo一些 ...

  5. Apache Avro:一个新的数据交换格式

    原文: http://blog.cloudera.com/blog/2009/11/avro-a-new-format-for-data-interchange/ 注:由于个人英语能力有限,翻译不准确 ...

  6. [kernel]内核日志及printk结构分析

    一直都知道内核printk分级机制,但是没有去了解过,前段时间和一个同事聊到开机启动打印太多,只需要设置一下等级即可:另外今天看驱动源码,也看到类似于Printk(KERN_ERR "... ...

  7. dp - HNU 13404 The Imp

    The Imp Problem's Link: http://acm.hnu.cn/online/?action=problem&type=show&id=13404&cour ...

  8. jenkins环境搭建&配置(二)

    Jenkins介绍: Jenkins用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. 安装环境: 操作系统:linux(centOS) 软件:jdk ...

  9. 003Maven_Maven核心概念

    Maven核心概念 Maven插件 Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的每个插件都能实现多个功能,每个功能就是一个插件目标 Maven的生命周期与插件目标相互绑定,以 ...

  10. 如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用

    如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用. #include <iostream> /* run this program using ...