Python進階特性:
切片:取一個list或tuple的部分元素
l = [1,2,3,4,5,6,7,8,9,10]
print(l[:3]) # 輸出從0-2,三個元素
>>>[1,2,3]
print(l[-1]) #取倒數第一個元素
>>>[10]
print(l[-2:]) #取倒數兩個元素
>>>[9,10]
print(l[:6:2]) #取前六個元素,每兩個選一個
>>>[1,3,5]
print(l[::3]) #取全部元素,每三個選一個
>>>[1,4,7,10]
print(l[:]) #可以原樣複制一個list
>>>[1,2,3,4,5,6,7,8,9,10]
疊代:通過for循環來周遊這個list或tuple,這種周遊叫做疊代
如果要對list或者tuple實作類似java那樣的下标循環,可以使用Python内置的enumerate函數,可以把一個list程式設計索引-元素對:
for i,vaule in enumerate(['A','B','C']):
print(1,vaule)
>>> 0 A
>>> 1 B
>>> 2 C
清單生成器:
l = [x*x for x in range(1,11)]
print(l)
>>> [1,4,9,16,25,36,49,64,81,100]
l = [x*x for x in range(1,11) if x%2 == 0]
print(l)
>>> [4,16,36,64,100]
l = [m + n for m in 'ABC' for n in 'XYZ']
print(l)
>>> ['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ']
#列出目前目錄下所有檔案和目錄名
import os #導入os子產品
l = [d for d in os.listdir('.')] #os.listdir 可以列出所有檔案名和目錄
#如果要在清單生成式中使用if...else模式(不是隻有if判斷時):
l = [x if x%2 == 0 else -x for x in range(1,11)]
print(l)
[-1,2,-3,4,-5,6,-7,8,-9,10]
生成器:generator,一邊循環一邊計算的機制,最簡單的方式是把清單生成器的[ ]換成( ),可解決清單生成器,建立清單過大導緻的資源浪費。
g = (x*x for x in range(10))
print(g)
#傳回的是generator的記憶體位址。
#如果要列印内容,使用next()
print(next(g))
#吐過一個函數定義中包含yield關鍵字,那麼這個函數就是不再是一個普通函數,而是一個generator生成器
def test(max):
n,a,b = 0,0,1
while n<max:
yield b
a,b = b,a+b
n = n + 1
return 'end'
#函數是順序執行,遇到return語句或者最後一行函數語句就傳回。而變成generator的函數,在每次調用next()的時候執行,遇到yield語句傳回,再次執行時從上次傳回的yield語句處繼續執行,而不是從頭執行。
#一般使用for循環來疊代
#如果要拿到最後的傳回值,可修改為
g = test(6)
while True:
try:
x = next(g)
print('g:',x)
except StopIteration as e:
print('Generator trturn value:',e.value)
break
#最後會輸出 Generator trturn value: end
疊代器:可以直接作用于for循環的對象統稱為疊代器。