python 推导式和迭代器、生成器

1、常用推导式

  • 推导式是从一个或者多个迭代器快速简洁创建数据结构的一种方法。
1.1 _ 列表推导式
  • 最简单的形式:  [exprssion for item in iterable]

    • 示例:  number_list = [x for x in range(1,10)] 
  • 加上条件表达式的形式:  [exprsssion for item in iterable if condition] 
    • 示例: a_list = [x for x in range(1,7) if x %2 ==1]
  • 多个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)} 
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方法的对象则是迭代器
时间: 2024-11-04 23:10:18

python 推导式和迭代器、生成器的相关文章

Python 推导式、迭代器、生成器、模块和包

一.推导式 (一).列表推导式(集合推导式也同理于此) 利用列表推导式,取出1-20内所有偶数 li = [i for i in range(1, 21) if i % 2 == 0] # 如果只有一个条件,要把if语句写在最后面 第一个i是放入列表的值,后面都是推导的公式 print(li) 第一个 i 相当于下面等价方案中的 append(i).把 i 换成 "a" ,输出的列表中全是 "a" 等价于 for i in range(1,21): if i%2==

Python装饰器、迭代器&amp;生成器、re正则表达式、字符串格式化

Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########

Python--Demo13--高级特性匿名函数、推导式、迭代器、生成器

学完函数,我们还需要知道一些让我们能够提高效率的高级特性: 使用lambda关键字来创建匿名函数: lambda表达式只是一个表达式,而不是是一个代码块,函数体比def简单很多: lambda表达式仅仅能够封装一些简单的逻辑: lambda表达式拥有自己的命名空间. >>> def plusitem(pam): ... return pam*pam ... >>> type(plusitem) <class 'function'> >>>

推导式、迭代器、生成器及包

# 一.推导式: # 列表推导式li = [i for i in range(1,10)]print(li) # 列表推导式中加判断li1 = [i for i in range(1,10) if i % 2 == 1]print(li1) # 列表推导式中加三目运算符li2 = [i*100 if i % 2 == 0 else i*10 for i in range(1,10)]print(li2) # 集合推导式se = {i for i in range(1,10)}print(se)

python之 可迭代 迭代器 生成器

0. 1.总结 (1) iterable 可迭代(对象) 能力属性 指一个对象能够一次返回它的一个成员,for i in a_list 而不需要通过下标完成迭代. 例子包括所有序列类型(list, str, tuple), 以及 dict, file, 还包括定义了 __iter__() 或 __getitem__() 方法的类实例. iterator 迭代器 具体实现 代表数据流的对象.重复调用迭代器的 next() (python3为 __next__()) 方法将依次返回流中的项.当没有更

python 推导式(Comprehensions)

一.介绍 列表推导(list comprehensions) 这是一种将for循环.if表达式以及赋值语句放到单一语句中的一种方法.换句话说,你能够通过一个表达式对一个列表做映射或过滤操作. 一个列表推导式包含以下几个部分: 1.一个输入序列 2.一个表示输入序列成员的变量 3.一个可选的断言表达式 4.一个将输入序列中满足断言表达式的成员变换成输出列表成员的输出表达式 二.举例 假如需要从列表中将所有大于0的整数平方生成一个新的列表,你也许会这么写: num_list = [11,2,-33,

python推导式创建序列

推导式创建序列 推导式是一个或多个迭代器快速创建序列的一种方式.可以将循环和条件判断结合,简化代码.几个推导式注意符号的使用,比如小括号,方括号,大括号等等. 列表推导式 列表推导式生成列表对象,语法: [表达式 for item in 可迭代对象] 或者:[表达式 for item in 可迭代对象 if 条件判断] 字典推导式 字典推导式生成字典对象,语法如下: {key_expression:value_expression for 表达式 in 可迭代对象} 也可以使用多个循环和判断 统

Python 推导式(列表推导式,字典推导式,集合推导式)

Python的各种推导式 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导. 列表推导式 字典推导式 集合推导式 列表推导式 1.使用[]生成list var = [out_exp_put for out_exp in input_list if out_exp == 2] out_exp_put 列表生成出来的表达式,可以是有返回值的函数. for out_exp in input_list

Python—推导式

推导式 推导式:comprehensions(又称解析式),是Python的一种独有特性,相当于语法糖的存在,推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(list)推导式 集合(set)推导式 字典(dict)推导式 列表推导式 randint 基本格式: 变量名 = [expression1 for variable in sequence[, if expression2]] expression1 : 列表生成元素表达式