1、列表生成式 python
一、range()能夠生成整數序列算法
range(a,b)生成a-b的整數序列,包括a,但不包括bapp
range(n)生成0-n的整數序列,包括0,但不包括n函數
將整數序列轉成list,可使用list(range(n))spa
二、能夠在列表中加計算式生成特定規律的列表code
[x*x for x in range(1,11)]就生成了[1x1,2x2,3x3,...,10x10]的列表對象
三、還可使用多層循環生成列表generator
[m+n for m in 'ABC' for n in 'XYZ']string
[變量的計算式 變量1的for循環 變量2的for循環 變量n的for循環]it
四、dict的items()能夠同時迭代key和value
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } >>> [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C']
五、計算式還可使用變量的方法
例如[s.lower() for s in L]
2、生成器
一、第一種生成器的建立方式
列表生成式一旦賦值,那麼所使用的存儲空間就肯定下來了,若是隻訪問前部的部分元素,那麼後面的空間就浪費了,所以提出了生成器的概念,給生成器賦予某種算法規律,不須要建立完整的list,而只須要建立一個生成器,一邊循環一邊計算,值在未被計算出來前不佔用存儲,節省存儲空間。
生成器建立以下:
g = (x * x for x in range(10))
通常使用for循環迭代生成器
for n in g: print(n)
二、第二種生成器的建立方式
用函數定義推算規則,若是一個函數定義中包含yield關鍵字,那麼這個函數就是一個generator
例如斐波那契數列的generator建立以下:
def fib(n):
a,b=0,1
for i in range(n):
yield b
a,b=b,a+b
調用時以下:
for k in fib(6):
print(k)
調用時,當函數中遇到yield時,返回打印yield 後面的值,而後繼續執行yield以後的語句
generator到結束時有StopIteration錯誤,若是捕獲到該錯誤就知道到結尾了
三、楊輝三角的打印list
1
1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
def YH():
L=[1]
while True:
yield L
L=[L[i]+L[i+1] for i in range(len(L)-1)]
L.insert(0,1)
L.append(1)
n=0
for i in YH():
print(i)
n+=1
if n>=10:
break
3、迭代器
一、凡是可做用於for
循環的對象都是Iterable
類型;
凡是可做用於next()
函數的對象都是Iterator
類型,它們表示一個惰性計算的序列;
集合數據類型如list
、dict
、str
等是Iterable
但不是Iterator
,不過能夠經過iter()
函數得到一個Iterator
對象。
二、能夠經過isinstance(a,Iterator)和isinstance(a,Iterable)來判斷類型