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

# 函数 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. RPC服务框架dubbo(一):简介和原理解析

    前置概念 在学习dubbo前,需要先了解SOA和RPC这两个概念. SOA 1.英文名称(Service Oriented Ambiguity) 2.中文名称:面向服务架构 2.1 有一个专门提供服务 ...

  2. java运算符优先级和结合性

    运算符 结合性 [ ] . ( ) (方法调用) 从左向右 ! ~ ++ -- +(一元运算) -(一元运算) 从右向左 * / % 从左向右 + - 从左向右 << >> & ...

  3. Linux:命令执行控制&&与||

    1.&& 方式:command1 && command2 如果command1执行成功,则执行command2 2.|| 方式:command1 || command2 ...

  4. QQ连连看-外挂

    QQ连连看-外挂 2014-11-06 参考 [1] [视频教程] c语言实践课程之qq连连看辅助开发 [2] CE工具下载 [3] [原创]qq连连看外挂制作详解

  5. 插入节点appendChild()

    http://www.imooc.com/code/1698 插入节点appendChild() 在指定节点的最后一个子节点列表之后添加一个新的子节点. 语法: appendChild(newnode ...

  6. [Linux内核]软中断与硬中断

    转自:http://blog.csdn.net/zhangskd/article/details/21992933 本文主要内容:硬中断 / 软中断的原理和实现 内核版本:2.6.37 Author: ...

  7. maven远程私服发布jar包

    配置项目POM.xml <distributionManagement> <repository> <id>nexus-releases</id> &l ...

  8. 解决Error:Android Dex: com.android.dex.DexIndexOverflowException: Cannot merge new index 65918 into a

    错误:Error:Android Dex: com.android.dex.DexIndexOverflowException: Cannot merge new index 65918 into a ...

  9. node.js发http请求

    标准库中默认的HTTP模块 const https = require('https'); https.get('https://api.nasa.gov/planetary/apod?api_key ...

  10. [android] AndroidManifest.xml - 【 manifest -> application】

    语法: <application android:allowTaskReparenting=["true" | "false"] android:back ...