Python學習筆記(三)

參考資料:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868196169906eb9ca5864384546bf3405ae6a172b3e000
學習內容:Python的一些高級特性

1、切片(Slice):用於從已知列表(包括元組和字符串)中截取部分元素生成新的列表,表達式爲L[i,n,m],L爲已知列表,i爲開始位置,n爲結束位置+1,m爲間隔。測試代碼如下:
#初始化一個0-99的數字列表
L=range(100)
#L[i:n]--輸出從位置i到n-1的子列表
print L[10:20]
print L[-2:100]
#L[i:n:m]--從位置i到n-1的元素中按間隔m生成子列表,i, n省略後從所有元素中按間隔m取出
print L[0:10:2]
#截取字符串
S='ABCDE'
print S[1:3]
print S[::2]

2、迭代(Iterate):一種針對列表元素的循環式。測試代碼如下:
#判斷是否可以迭代
from collections import Iterable
S='ABCDE'
L=range(100)
D={'A':"VA", 'B': "VB", 'C': "VC"}
I=12345
print "Is string to be iterated?", isinstance(S, Iterable)
print "Is list to be iterated?", isinstance(L, Iterable)
print "Is dictionary to be iterated?", isinstance(D, Iterable)
print "Is integer to be iterated?", isinstance(I, Iterable)
#迭代輸出字符串
for s in S:
    print s
#迭代輸出字符串索引及字符
for i, v in enumerate(S):
    print i,v
#迭代輸出列表的前10項
for i, v in enumerate(L):
    print v
    if i == 9: break
#迭代輸出字典項,因爲dict的存儲不是按照list的方式順序排列,所以,迭代出的結果順序很可能不一樣。
for k in D:
    print k
#迭代輸出字典值
for v in D.itervalues():
    print v
#迭代輸出字典項和字典值
for k,v in D.iteritems():
    print k, v

3、列表生成式:用一行代碼生成指定格式元素組成的新列表,表達式爲[變量表達式 迭代循環表達式 條件表達式]。測試代碼如下:
L=range(1, 11)
L1=[x * x for x in L]
print L1
#帶條件生成
L2=[x * x for x in L if x % 2 == 0]
print L2
L3=[1, 2, 'A', 'B', 'C']
L4=[str(i) + ":" + s.lower() for i, s in enumerate(L3) if isinstance(s, str)]
print L4
#多循環生成
S1="AB"
S2="XY"
S=[a + b for a in S1 for b in S2]
print S
#多變量循環生成
S=[str(i) + ":" + v for i, v in enumerate(S1)]
print S

4、生成式:定義一種算法,通過next或循環,輸出每次執行算法後的結果。測試代碼如下:
#列表生成器
L=range(1, 10)
g=(x * x for x in L)
i=0
#輸出方法1,指定的循環次數必須正確,否則會報錯
while i < 9:
    print g.next()
    i = i + 1
#輸出方法2,注意:執行完輸出方法1後,由於沒有可供輸出的元素了,所以下面的方法將不再執行。
for d in g:
    print d
#函數擴展生成器yield,每次執行包含yield關鍵字的函數時,遇到yield及將yield後跟的內容作爲返回值,並終止執行,下一次執行該函數將從該yield語句的下#一行開始,直到遇到下一個yield。另外,一個函數體中不能同時包含yield和return關鍵字。
def myGenerater():
    #code for first step
    yield 1
    #code for second step
    yield 2
    #code for third step
    yield 3
M=myGenerater()
for n in M:
    print n

參考資料中給出了生成式擴展的斐波那契數列數列生成函數,很經典。
#生成器實現斐波那契數列
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
for n in fib(6):
    print n
今天就學到這裏啦,下一節從函數式編程開始學習!
發佈了80 篇原創文章 · 獲贊 3 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章