Python自學之高級語法特性

1-切片
切片用於提取一組數據list、tuple等中的一部分,個人感覺和matlab語法很相似,
例如

l[0:3]  #表示取l[0],l[1],l[2]
l[:3]   #與上面等價,初始或者結束爲首尾位置,則可以縮寫
l[-2:0] #表示取倒數第一個l[-1]和倒數第二個l[-2]
l[-2:]  #與上面等價
l[0:5:2]#表示以2個2個取,得到l[0],l[2],l[4]
l[::2]  #表示2個2個取整個數據集

切片也同樣適用於字符串,

'ABCDEFG'[0:2]  #結果取AB

2-迭代
Python可以對任何可迭代對象進行迭代,迭代使用for x in y的形式進行迭代。

#d = {'a'='1','b'='2'}
for key in d:       #遍歷d的key,輸出
    print(key)
for value in d.values()    #用於迭代dict的value
for x,y in d.items()       #用於同時迭代dict的key 和value

如何判斷是否爲可迭代對象呢?
引入函數

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整數是否可迭代
False

3-列表生成式
最簡單的列表生成

[x + 1 for x in range(1,5)]
[2,3,4,5]

增加條件的列表生成

[x + 1 for x in range(1,5) if x%2 ==0]
[3,5]

雙層列表生成

[x + y for x in 'ABC' for y in '123']
['A1','A2','A3','B1','B2','B3','C1''C2','C3']

簡單應用,例如把list裏面的所有字符串的第一個字母變成小寫

m = ['He','She']
[l[0].lower() + l[1:] for l in m]   #輸出['he','she']

4-生成器(generator)
利用列表生成式,我們可以一次性生成許多數據,如果我們只需要使用其中一部分,進行動態的生成,不用一次性佔用很多內存,循環進行到哪裏,就計算出下一個值,就可以使用生成器,生成器的使用有兩種方法,
第一種,使用列表生成的generator:

>>>g = (x+1 for x in range(0,4))    #將[]變成()
>>>g
#不會輸出,因爲這個時候g是一個generator,還未開始動態生成
>>>g = (x+1 for x in range(0,4))  
>>>for value in g:
            print(value)
1
2
3
4

第二種針對無法使用列表生成式寫出的複雜過程,可以使用函數進行generator,與一般函數不同的是,一般函數執行函數內部語句直到執行到return就退出函數體,generator的函數使用yield表示生成一次,執行到第一個yield時候就出該值,然後從這個位置開始繼續執行下去,執行到最後一句語句或者return的時候就退出函數體。

def tri(n):
    l = [1]
    while n > 0:
        n =n - 1
        yield l
        l = [l[x] + l[x+1] for x in range(len(l)-1)]
        l.insert(0,1)
        l.append(1)
for x in tri(4):
    print(x)

#結果
#[1]
#[1,1]
#[1,2,1]
#[1,3,3,1]

上述兩種方法都可以使用next()函數進行不斷求得下一個數值,
Tips
使用生成器生成的序列是一種惰性序列,他只在你需要的範圍內在需要的時候生成,並且可以是一個無限序列,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章