天天看點

Python學習,這些高階函數和進階特性值得一學!清單元素依次連接配接zip生成字典對應清單元素相加最後

Python語言這麼火,不論是對于剛開始學習的程式設計小白或者有接觸過其他語言(c/c++/java等等)的同學來說,寫代碼的時候難免會受本身慣性思維或者其他語言的影響!解決問題的思路有的時候會比較單一,其實Python有很多靈活的解法,比如python的幾個高階函數或者特性!

推導式

  • 清單推導式,使用一句表達式構造一個新清單,可包含過濾、轉換等操作。

文法:[exp for item in collection if codition]

例子:1-1000内所有偶數組成的清單

2種方法,大家自己對比

#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}

set = {i for i in range(10)}#結果{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

map函數

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函數

  • 篩選序列
  • filter(func, lst),将func作用于lst的每個元素,然後根據傳回值是True或False判斷是保留還是丢棄該元素。

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的技巧非常非常多,大家平時的寫代碼或者讀代碼的時候要注意收集,特别是有一些精妙的招數,一時半會無法領悟,可以記下來,慢慢思考,總有一天會對你的功力增長大有裨益.

還是那句話,代碼一定要多練習才能掌握!大家加油!