列表生成式、生成器、迭代

一、列表生成式

1、range()可以生成整数序列

range(a,b)生成a-b的整数序列,包括a,但不包括b

range(n)生成0-n的整数序列,包括0,但不包括n

将整数序列转成list,可以使用list(range(n))

2、可以在列表中加计算式生成特定规律的列表

[x*x for x in range(1,11)]就生成了[1x1,2x2,3x3,...,10x10]的列表

3、还可以使用多层循环生成列表

[m+n for m in ‘ABC‘ for n in ‘XYZ‘]

[变量的计算式 变量1的for循环 变量2的for循环 变量n的for循环]

4、dict的items()可以同时迭代key和value

>>> d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ }
>>> [k + ‘=‘ + v for k, v in d.items()]
[‘y=B‘, ‘x=A‘, ‘z=C‘]

5、计算式还可以使用变量的方法

例如[s.lower() for s in L]

二、生成器

1、第一种生成器的创建方式

列表生成式一旦赋值,那么所使用的存储空间就确定下来了,如果只访问前部的部分元素,那么后面的空间就浪费了,因此提出了生成器的概念,给生成器赋予某种算法规律,不需要创建完整的list,而只需要创建一个生成器,一边循环一边计算,值在未被计算出来前不占用存储,节省存储空间。

生成器创建如下:

g = (x * x for x in range(10))

一般使用for循环迭代生成器

for n in g:
    print(n)

2、第二种生成器的创建方式

用函数定义推算规则,如果一个函数定义中包含yield关键字,那么这个函数就是一个generator

例如斐波那契数列的generator创建如下:

def fib(n):    a,b=0,1    for i in range(n):        yield b        a,b=b,a+b

调用时如下:

for  k in fib(6):

  print(k)  

调用时,当函数中遇到yield时,返回打印yield 后面的值,然后继续执行yield之后的语句

generator到结束时有StopIteration错误,如果捕获到该错误就知道到结尾了

3、杨辉三角的打印list

       1

        1   1
      1   2   1
    1   3   3   1
  1   4   6   4   1
1   5   10  10  5   1
def YH():    L=[1]    while True:        yield L        L=[L[i]+L[i+1] for i in range(len(L)-1)]        L.insert(0,1)        L.append(1)n=0for i in YH():    print(i)    n+=1    if n>=10:        break

三、迭代器

1、凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

2、可以通过isinstance(a,Iterator)和isinstance(a,Iterable)来判断类型

时间: 2024-08-01 01:31:37

列表生成式、生成器、迭代的相关文章

python列表生成式&生成器&迭代器

一.列表生成式 什么是列表生成式? 列表生成式是快速生成列表的一种方式.(貌似有些废话) 更专业点的说法:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 在python2.7里 举个例子,要生成list [1,2,3,4,5],可以用range(1,6) >>> range(1,6) [1, 2, 3, 4, 5] 但是如果要生成[1x1,2x2,3x3,4x4,5x5]怎么做呢? 普通青年做法: >>&

s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法

python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf-8_*_ 或者将字符串单独声明: a = "中文".encode("utf-8") 函数式编程 函数式编程中的函数指代的是数学中的函数. 函数式编程输入如果确定,则输出一定是确定的.函数中并没有很多逻辑运算 python是一个面向对象的语言,只是一部分支持函数式编程.

列表生成式,生成器

一.列表生成式 二.生成器 斐波那契数列可以用生成器来实现. 参见:廖雪峰的生成器的教程 原文地址:https://www.cnblogs.com/zhizihuakai66/p/8877315.html

列表生成式&生成器表达式

一.列表生成式 def func(): return [lambda x:i*x for i in range(4)] print([j(2) for j in func()]) 结果:[6,6,6,6] 二.生成器表达式 def func(): return (lambda x:i*x for i in range(4)) print([j(2) for j in func()]) 结果:[0,2,4,6] 原文地址:https://www.cnblogs.com/gpd-Amos/p/899

5.1.24 Python之列表生成式、生成器、可迭代对象与迭代器

语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法糖的概念 "语法糖",从字面上看应该是一种语法."糖",可以理解为简单.简洁.其实我们也已经意识到,没有这些被称为"语法糖"的语法,我们也能实现相应的功能,而 "语法糖"使我们可以更加简洁.快速的实现这些功能. 只是Python解释器会把这

学习7: 列表生成式,生成器,迭代器,可迭代对象

1) 列表生成式,即创建列表的方式 列表生成式,这里是中括号[] >>> [x*x for x in range(0,10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] >>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ

迭代与列表生成式、生成器

一.迭代 python中如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断: >>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, It

Python高级特性:Python迭代、生成器、列表生成式

迭代 给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration). 在java和C语言中,迭代是通过循环list的下标来完成的,Python中迭代的抽象程度更高,不仅可以迭代list和tuple,而且可以迭代任何可迭代对象,包括我们自己创建的数据类型,只要符合迭代条件,无论有无下标,都可以使用for循环. Python中的迭代是通过for -in -来完成的. 字典的迭代 比如字典就是可以迭代的: 1 >>> d = {'a

Python的高级特性之切片、迭代、列表生成式、生成器

切片 切片就是获取一个list.tuple.字符串等的部分元素 1 l = range(100) 2 #取[0,5)元素 3 print(l[:5]) #[0, 1, 2, 3, 4] 4 #在[0,99]中每隔10个元素取一个 5 print( l[::10]) #[0, 10, 20, 30, 40, 50, 60, 70, 80, 90] 6 #取最后五个元素 7 print( l[-5 : ]) #[95, 96, 97, 98, 99] 8 9 str = "www.genekang.