Python--进阶处理4
#================第四章:迭代器和生成器=================== # 函数 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的更多相关文章
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
- Python进阶 - 对象,名字以及绑定
Python进阶 - 对象,名字以及绑定 1.一切皆对象 Python哲学: Python中一切皆对象 1.1 数据模型-对象,值以及类型 对象是Python对数据的抽象.Python程序中所有的数据 ...
- Python进阶-继承中的MRO与super
Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...
- Python进阶 - 命名空间与作用域
Python进阶 - 命名空间与作用域 写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空 ...
- python进阶学习笔记(一)
python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...
- 【python进阶】详解元类及其应用2
前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...
- 【python进阶】Garbage collection垃圾回收2
前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...
- Python进阶 函数式编程和面向对象编程等
函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...
- 【python进阶】深入理解系统进程2
前言 在上一篇[python进阶]深入理解系统进程1中,我们讲述了多任务的一些概念,多进程的创建,fork等一些问题,这一节我们继续接着讲述系统进程的一些方法及注意点 multiprocessing ...
- Python进阶:如何将字符串常量转化为变量?
前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...
随机推荐
- SPD
一般是在内存条上的.1.SPD是SERIAL PRESENCE DETECT的缩写,中文意思是模组存在的串行检测.也即是通过上面讲的IIC串行接口的EEPROM对内存插槽中的模组存在的信息检查.这样的 ...
- jmap 查看内存使用直方图
jps -- 查看进程号 jmap -histo pid 查看堆内存中的对象数目.大小统计直方图, 如果带上live则表示先进行一次fullgc 再统计内存使用情况,如下: jmap -hist ...
- 基于 html5的 jquery 轮播插件 flickerplate
https://github.com/chrishumboldt/Flickerplate 官网 <link href="${baseURL}/themes/default/css/f ...
- VBA学习笔记(1)----VBA对象属性方法
'VBA对象 'VBA中的对象其实就是我们操作的具有方法.属性的excel中支持的对象 'Excel中的几个常用对象表示方法 '1.工作簿 ' Workbooks 代表工作簿集合,所有的工作簿,Wor ...
- python操作word(改课文格式)【最终版】
python操作word的一些方法,前面写了一些感悟,有点跑题,改了下题目,方便能搜索到.心急的可以直接拉到最后看代码,我都加了比较详细的注释. 从8.3号早上9点,到8.8号下午5点半下班,终于把这 ...
- oracle获取SID
windows 下查看注册表 开始 输入regedit 查看HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1\ORACLE_SID就是 lin ...
- MyBatis增删改查模板
1. 首先,和Spring整合一下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...
- C++ 函数的扩展②
//函数扩展--默认参数和占位参数 (了解) #include<iostream> using namespace std; /* 可以将占位参数与默认参数结合起来使用 意义 为以后程序扩 ...
- Hadoop中HDFS工作原理
转自:http://blog.csdn.net/sdlyjzh/article/details/28876385 Hadoop其实并不是一个产品,而是一些独立模块的组合.主要有分布式文件系统HDFS和 ...
- imx6 uboot logo 更改
最近需要更改im6 uboot的开机logo,使用10.1inch, 1024x600,18bit的LCD,期间遇到了很多的问题,记录于此. 参考链接 https://community.nxp.co ...