Python基礎——3特性

特性

切片

 1 L=[0,1,2,3,4,5,6,7,8,9,10]
 2 L[:3]=[0,1,2]
 3 L[-2:]=[9,10]
 4 L[1:3]=[1,2]
 5 L[::3]=[0,3,6,9]
 6 L[:5:2]=[0,2,4]
 7 >>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 8 >>> alist[-1: -5: -1]
 9 [9, 8, 7, 6]
10 >>> alist[9: 5: -1]
11 [9, 8, 7, 6]
12 >>> alist[-1::-1]
13 [9, 8, 7, 6, 5, 4, 3, 2,1,0]
14 >>> alist[6:-8:-1]
15 [6, 5, 4, 3]

列表生成式

例如:生成一個1,2,3 …… 的平方的List,用列表生成式就很方便python

[x*x for x in range(1:n)]函數

還能夠添加條件篩選spa

[x*x for x in range(1:n) if x%2 ==]code

能夠生成全隊列對象

[x+y for x in ‘AB’ for y in ‘CD’]blog

[‘AC’,’AD’,’BC’,’BD’]隊列

dict用於行列生成式內存

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

列表生成器

因爲當列表生成式生成大量數據時會佔用大量的內存,因此若是列表的元素能夠經過一邊循環一邊計算出來,能夠節省大量的空間,這種一邊循環一邊計算的方式成爲生成器:generatorgenerator

g = (x*x for x in [1,2,3,4,5,6,7,8,9]) #定義一個生成器it

next(g)   1

next(g) 4

…..

由於生成器也是可迭代對象,因此能夠用for n in g print(n)讀取生成器數據

例子:斐波拉契數列,除第一個和第二個數外,任意一個數均可由前兩個數相加獲得   1,1,2,3,5,8,13,21,34…

def fei(n)
    a,b = 0,1
    while n:
        yield b
        a,b = b,a+b
        n = n-1
    return ‘done’

其中yield是關鍵字,能夠把定義的函數變成一個generator,這裏最難理解的就是generator和函數的執行流程不同。函數是順序執行,遇到return語句或者最後一行函數語句就返回。而變成generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。

f = fei(6)

next (f)  1

next(f)   1

或者for x in fib(6)

       print(x)

可是用for循環調用generator時,發現拿不到generator的return語句的返回值。若是想要拿到返回值,必須捕獲StopIteration錯誤,返回值包含在StopIteration的value中:

>>> g = fib(6)
>>> while True:
...     try:
...         x = next(g)
...         print('g:', x)
...     except StopIteration as e:
...         print('Generator return value:', e.value)
...         break
...

g: 1

g: 1

g: 2

g: 3

g: 5

g: 8

Generator return value: done

例子

def yang ()
    L = [1]
    while True
        yield  L
        L = [1] + [L[i]+L[i+1]  for i in range(len(L)-1)] + [1]
相關文章
相關標籤/搜索