python 推导式和迭代器、生成器
1、常用推导式
- 推导式是从一个或者多个迭代器快速简洁创建数据结构的一种方法。
1.1 _ 列表推导式
- 最简单的形式: [exprssion for item in iterable]
- 示例: number_list = [x for x in range(,)]
- 示例: number_list = [x for x in range(,)]
- 加上条件表达式的形式: [exprsssion for item in iterable if condition]
- 示例: a_list = [x for x in range(,) if x % ==]
- 多个for的嵌套表达式: [(x,y) for x in x_list for y in y_list] 生成一个x,y的元组的列表。
1.2 _ 字典推导式
- 最简单的形式: {key_expression:value_expression for expression in iterable}
- 示例: word = 'letter',let_dict = {let:word.count(let) for let in word}
- 上一例子有字母出现两次,浪费时间用set来改善
let_dict = {let:word.count(let) for let in set(word)}
- 示例: word = 'letter',let_dict = {let:word.count(let) for let in word}
1.3 _ 集合推导式
- 与列表和字典相似:
{expression for expression in iterable}
1.4 _ 生成器推导式
- 元组没有推导式,它的圆括号是用来坐生成器推导式
t_generotor = (x for x in range(1,8))
- 生成器可以转化成列表推导式 t_list = list(t_generotor)
- 一个生成器只能运行一次,运行完就没有了。列表、集合字符串和字典都是存储在内存中,但是生成器仅在运行中产生值,不会被存储下来,所以不能重新使用或者备份一个生成器。
2、生成器
- 生成器是用来创建一个python序列的一个对象。使用它可以迭代庞大序列,且不需要在内存创建和存储整个序列。
- 每次迭代生成器时,它会记录上一次调用的位置,并且返回下一个值。这一点和普通的函数是不一样的,一般函数都不会记录上一次调用,而且都会在函数的第一行开始执行。
创建一个比较大序列,使用生成器推导式的代码会很长,可以写一个生成器函数。生成器函数和普通函数类似,但是它的返回值使用yield语句声明而不是return。
def my_range(first=0, last=10, step=1):
<ul><li>number = first</li>
<li>while number < last:</li>
<li>yield number</li>
<li>number+=step
my_range 返回的是一个生成器对象,可以使用这个生成器对象进行迭代: for x in my_range():print x
3、使用zip并行迭代
- 使用迭代的时候,可以通过zip()对多个序列进行并行迭代.
days= {'monday' , 'tuesday', 'wednesday'}</li>
<li>fruit= {'banana', 'orange', 'peach'}</li>
<li>dessert = {'misc', 'drink', 'ice', 'pudding'}</li>
<li>for day,fru,drink in zip(days,fruit,dessert):</li>
<li>print day,fru,drink
- zip()函数在最短序列用完就会停止,上述最长的列表后面的元素无法填充
- 配合ditc()函数和zip()函数的返回值可以得到一个字典.
dict(zip(list_1,list_2))
4、迭代器
- 4.1 迭代器规则
- 迭代的意思是重复做一些事很多次——就想循环中那样。
__iter__的方法返回一个迭代器(iterator),所谓的迭代器就是具有next方法(这个方法在调用时不需要传递任何参数)。在调用next方法时,迭代器会返回它的下一个值。如果next方法被调用,但迭代器没有值可以返回,就会引发一个stopIteration异常。[3.0中是__next__]- 一个实现了
__iter__方法的对象是可迭代的,一个实现了next方法的对象则是迭代器
python 推导式和迭代器、生成器的更多相关文章
- Python 推导式、迭代器、生成器、模块和包
一.推导式 (一).列表推导式(集合推导式也同理于此) 利用列表推导式,取出1-20内所有偶数 li = [i for i in range(1, 21) if i % 2 == 0] # 如果只有一 ...
- Python推导式详解,带你写出比较精简酷炫的代码
Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...
- Python推导式
Python推导式 推导式:是Python中提供的一个非常方便的功能,可以通过一行代码实现创建 list.dict.tuple.set的同时初始化一些值. 1.列表推到式 # -*- coding: ...
- python推导式pythonic必备【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- python推导式pythonic必备
编程规范 今天公司新出了一套Python编程规范2.0,一直觉得自己写代码路子有点野,所以仔细的看了下. 多数的内容在网上都能搜到,但有几点需要说说 让我觉得羞愧的注释率 公司要求代码注释行,占代码总 ...
- Python装饰器、迭代器&生成器、re正则表达式、字符串格式化
Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...
- python推导式与海象运算符
背景:介绍两种python用于语句优化的用法 一.推导式 1.推导式简介: Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体. 支持:列表(list).元 ...
- Python推导表达式、迭代器、生成器、模块和包
推导表达式 yield用法 模块的概念和导入方法 包和包管理 推导表达式(利用for,一个一个地放入数据) 列表推导 集合推导 字典推导 迭代器 迭代 for 迭代变量 in 可迭代对象 每一次循环都 ...
- 周末学习笔记——day02(带参装饰器,wraps修改文档注释,三元表达式,列表字典推导式,迭代器,生成器,枚举对象,递归)
一,复习 ''' 1.函数的参数:实参与形参 形参:定义函数()中出现的参数 实参:调用函数()中出现的参数 形参拿到实参的值,如果整体赋值(自己改变存放值的地址),实参不会改变,(可变类型)如果修改 ...
随机推荐
- c++中冒号(:)和双冒号(::)的用法
1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned ; unsigned char c; } ; XXX (2)构造 ...
- OCP-1Z0-053-V12.02-501题 【转】
http://blog.csdn.net/rlhua/article/details/12225237 501.Note the output of the following query; SQL& ...
- iOS进阶:Objective-C runtime(一)
第一次看到runtime时,觉得太高大上,动态获取方法.属性等简直厉害的不要不要的.在经过查找资料+实践后,发现runtime并没有想象中那么复杂,接下来对runtime进行基本的介绍. 要使用运行时 ...
- 在EL表达式或者Struts标签库中格式化日期对象,即将Date转换为yyyy-MM-dd格式
一.EL表达式 首先,在jsp页面引入<fmt> tags,<%@ taglib prefix="fmt" uri="http://java.sun.c ...
- 20160125--Spring
package com.hanqi; import java.util.*; import com.hanqi.User; public class HelloWorld { public Hello ...
- Fast InvSqrt()(平方根倒数速算法)
浮点数的平方根倒数常用于计算正规化矢量.3D图形程序需要使用正规化矢量来实现光照和投影效果,因此每秒都需要做上百万次平方根倒数运算,而在处理坐标转换与光源的专用硬件设备出现前,这些计算都由软件完成,计 ...
- static函数和普通函数的区别
static函数与普通函数的区别: 用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用.而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数. 在 ...
- Linux 如何打开端口
举例: 开放10000端口的解决步骤如下: 1.修改/etc/sysconfig/iptables文件,增加如下一行: -A RH-Firewall-1-INPUT -m state --state ...
- hibernate详解
Hibernate原理与应用 主要内容 1.引入 2.安装配置 3.基本概念和CURD 4.HQL和Criteria 5.关联映射 6.继承映射 7.集合映射 8.懒加载 9.缓存 10.事务 11. ...
- cdoj 韩爷的情书 有向图 欧拉路径
//欧拉回路 解法:首先判断欧拉回路存在性:1.连通 2.没有出度入度相差大于1的点 3.如果有出度入度相差等于1的点那么必须有两个,一个出度大于入度作为起点,一个入度大于出度作为终点. 在确定了起点 ...