码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-06-24 22:54:29      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:抛出异常   style   定义   使用   i+1   ext   迭代器   bcb   list   

一、列表生成式

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

  

  

 

 

  

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

标签:抛出异常   style   定义   使用   i+1   ext   迭代器   bcb   list   

原文地址:http://www.cnblogs.com/dyzne/p/7074600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!