列表生成式,迭代器&生成器
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]
以上是关于列表生成式,迭代器&生成器的主要内容,如果未能解决你的问题,请参考以下文章