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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表生成式,迭代器&生成器相关的知识,希望对你有一定的参考价值。

一、列表生成式

  用例--使列表数值都加上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]

  

  

 

 

  

以上是关于列表生成式,迭代器&生成器的主要内容,如果未能解决你的问题,请参考以下文章

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

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

python-基础 生成式 生成器 迭代器 JSON pickl

迭代器和生成器 学习

Python生成器&迭代器

一起看看Python中的迭代器&生成器