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

一、列表生成式

  用例--使列表数值都加上1

1 li = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 li_tmp = [i+1 for i in li]
3 li = li_tmp
4 print("new list:"+str(li))  #[1, 2, 3, 4, 5, 6, 7, 8, 9,10]
li_dic =  [{1:3+i,2:4+i} for i in range(5)]  #[{1: 3, 2: 4}, {1: 4, 2: 5}, {1: 5, 2: 6}, {1: 6, 2: 7}, {1: 7, 2: 8}]

总结:在列表中使用for循环来生成列表,循环的次数就是列表元素的个数

用例--替代方法1

li = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for index,i in enumerate(li):
    li[index]+=1
 print(li)

总结:使用enumerate函数,其中index赋值列表的索引,i赋值列表的值,i虽然没用到,但必须写上

  用例-替代方法2

li = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
li_tmp =  []
for i in li:
    li_tmp.append(i+1)
li = li_tmp
print("new list:"+str(li))

总结:需先定义这个空列表li_tmp,,且空列表默认没有索引,不能直接赋值,如li_tm [0] =1,提示(index out of range)

二、生成器

一边循环一边计算的机制,就是生成器。

特点:不必生成完整的List,从而节省了大量空间

核心:generator保存的是算法

  创建方法:把列表的[ ] -->()

g =  (x*x for x in range(5))
print(‘g:%s:‘% g)
#g:<generator object <genexpr> at 0x7fb0aecbcbe0>:

  打印generator的元素:a,b两种方法

  a:使用next()函数,当打印到最后一个继续打印,抛出(StopIteration) 

for i in range(6):
    try:
         print(next(g))
    except StopIteration:
         print("not more")

  b:使用for,generator也是可迭代对象

for i in g:
    print("print g use for:%s" % i)

总结:打印generator基本使用for,不用关心抛出异常,next()基本不会使用。

  斐波拉契数列(Fibonacci)

  除前两个数,其他数都是其前两个数的和:1, 1, 2, 3, 5, 8, 13, 21, 34, ...

def fib(max):
    n, a, b = 0, 0, 1
    li = []
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
        li.append(b)
        print(li)
fib(10)#打印出这个数列的前10位
  #[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

  

  

  

时间: 2024-10-26 05:42:13

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

列表生成式、生成器&amp;迭代器

一.列表生成式 先有列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,怎么实现? 方法一: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b = [] for i in a:b.append(i+1) a = b print(a) 此方法内存中会同时有两份列表,因此不适合处理大规模数据. 方法二: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for index,i in enumerate(a): a[

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

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

Python基础----生成器、三元表达式、列表生成式、生成器表达式

Python开发基础-Day9-生成器.三元表达式.列表生成式.生成器表达式 生成器 生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器,生成器在本质上就是迭代器. def foo(): print('first------>') yield 1 print('second----->') yield 2 print('third----->') yield 3 print('fouth----->') g=foo() from collections impor

python学习笔记——列表生成式与生成器

1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行: 1 L = [] 2 for i in range(1,11): 3 L.append(i*i) 列表生成式只用一行,前面是生成规则,后面是初始元素,最后还可以加上判断条件: 1 [i*i for i in range(1, 11)] 列表生成式还可以实现多层循环,以及判断,刚刚的栗子再写复杂一

Python函数编程——列表生成式和生成器

Python函数编程--列表生成式和生成器 一.列表生成式 现在有个需求,现有列表a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,你怎么实现? 1.二逼青年版 生成一个新列表b,遍历列表a,把每个值加1后存在b里,最后再把a=b, 这样二逼的原因不言而喻,生成了新列表,浪费了内存空间. >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> b = [] >>> for i in

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

一句话概念 列表生成式--可以直接在列表里进行运算 生成器--一边循环一边计算的机制,称为生成器:generator(就是生成一个不运行的函数或者列表,即数据流) 第二句:生成器与列表的区别--生成器你不知道长度,就是一个数据流:list.dict.str你知道长度 迭代器--可以被next()函数调用并不断返回下一个值的对象称为迭代器 第二句:可迭代对象--可以直接作用于for循环的对象统称为可迭代对象:Iterable 第三句:生成器一定是迭代器,迭代器不一定是生成器 列表生成式 data

学习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

列表生成式,生成器和迭代器

1.列表生成式 语法:[条件表达式  for i in iterable] a=list(range(10)) b=[i+1 for i in a] #这种形式就是列表生成式 print(b) 用列表生成式可以简化代码,等价于下面的几种方法: 1 #方法一 2 a=list(range(10)) 3 b=[] 4 for i in a: 5 b.append(i+1) 6 7 print(b) 8 9 #方法二 10 a=list(range(10)) 11 for index,i in enu

Python-基础知识-列表生成式、生成器和迭代器

一.列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)): list(range(1,11)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环: for x in range(1, 11

python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,next 方法 内置函数iter(),next()  本质上都是用的对象.__iter__(),__next__()的方法 内置函数 iter(iterable),表示把可迭代对象 变成迭代器(iterator) 内置函数next(iterator) ,表示查看下一次迭代的值(当然也可以用 iterato