Python語言這麼火,不管是對於剛開始學習的編程小白或者有接觸過其餘語言(c/c++/java等等)的同窗來講,寫代碼的時候不免會受自己慣性思惟或者其餘語言的影響!解決問題的思路有的時候會比較單一,其實Python有不少靈活的解法,好比python的幾個高階函數或者特性!java
推導式python
列表推導式,使用一句表達式構造一個新列表,可包含過濾、轉換等操做。c++
語法:[exp for item in collection if codition]編程
例子:1-1000內全部偶數組成的列表數組
2種方法,你們本身對比app
#one res = [] for i in range(1,1001): if i%2==0: res.append(i) print(res) #two print([i for i in range(1,1001) if i%2==0])
字典推導式,使用一句表達式構造一個新列表,可包含過濾、轉換等操做。函數
語法:{key_exp:value_exp for item in collection if codition}學習
print({key:value for key,value in enumerate(reversed(range(10)))}) #{0: 9, 1: 8, 2: 7, 3: 6, 4: 5, 5: 4, 6: 3, 7: 2, 8: 1, 9: 0}
語法:{exp for item in collection if codition}spa
set = {i for i in range(10)}#結果{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
map函數code
map(fun, lst),將傳入的函數變量func做用到lst變量的每一個元素中,並將結果組成新的列表返回
lis = [i**2 for i in range(10)] print(lis) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] print(list(map(float,lis))) #[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] print(list(map(str,lis))) #['0', '1', '4', '9', '16', '25', '36', '49', '64', '81']
規範字符串
name = ['gOd','zIp','NAMe','titLE','filter'] print(list(map(str.title,name))) #['God', 'Zip', 'Name', 'Title', 'Filter']
filter函數
lis = range(-10,10) print(list(lis)) #[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] def fun(x): return x<0 print(list(filter(fun,lis))) #[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]
zip函數
zip([iterable, ...])
用於將可迭代的對象做爲參數,將對象中對應的元素打包成一個個元組,而後返回由這些元組組成的列表。
若是各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操做符,能夠將元組解壓爲列表。
lis_a = ['a','b','c'] lis_b = ['aa','bb','cc'] lis_c = ['a','b','c','d'] lis_ab = list(zip(lis_a,lis_b)) lis_bc = list(zip(lis_b,lis_c)) print(lis_ab) #[('a', 'aa'), ('b', 'bb'), ('c', 'cc')] print(lis_bc) #[('aa', 'a'), ('bb', 'b'), ('cc', 'c')] print(list(zip(*lis_bc))) #[('aa', 'bb', 'cc'), ('a', 'b', 'c')]
幾個zip技巧
#列表元素依次鏈接 lis = [i for i in range(10)] print(list(zip(lis[1:],lis[:-1]))) #zip生成字典 print(dict(zip('abcd','1234'))) #對應列表元素相加 lis1 = [i for i in range(5)] lis2 = [i*2 for i in range(6)] lis3 = [i**2 for i in range(5)] lis = [] for x,y,z in zip(lis1,lis2,lis3): lis.append(x+y+z) print(lis)
列表元素依次鏈接 [(1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5), (7, 6), (8, 7), (9, 8)] zip生成字典 {'a': '1', 'b': '2', 'c': '3', 'd': '4'} 對應列表元素相加 [0, 4, 10, 18, 28]
zip是一個很是重要的函數,很是方便.熟悉掌握zip幫咱們大幅的減小函數的代碼和複雜度,而且提升效率!
其實Python的技巧很是很是多,你們平時的寫代碼或者讀代碼的時候要注意收集,特別是有一些精妙的招數,一時半會沒法領悟,能夠記下來,慢慢思考,總有一天會對你的功力增加大有裨益.
仍是那句話,代碼必定要多練習才能掌握!你們加油!