列表生成式,叠代器&生成器
阿新 • • 發佈:2017-06-25
函數 logs bsp fibonacci aec 生成式 more code 元素
一、列表生成式
用例--使列表數值都加上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]
列表生成式,叠代器&生成器