你需要知道的5個Python技巧

全文共 2626 字,預計學習時長 8 分鐘

來源:Pexels

Python 有如此出色的支持網絡,似乎一次可以解決很多問題。 人們應該認識到這是正常現象。

但初學者可能會對此感到困惑。 人們可以找到大量資源來解決基礎知識問題,但然而呢? 要學習哪些資源以不斷進步呢?

在這裏,筆者列出了5個最有用的代碼段,這些代碼段進一步提高了筆者的水平,使代碼變得更好。

下文將介紹如何在代碼中應用這5個代碼段。

1.列表推導式

有人或許以前聽說過這些。Python中的一種編碼模式十分常見,因此需要進行修改。使用for循環創建列表是列表推導的價值所在。

列表推導式可讀且簡潔,也確實需要花費一些時間來了解發生了什麼。下面將深入研究是否可以解決這個問題。

創建列表時應考慮列表推導式。列表推導式從一組方括號開始。先不管語法,以便展示兩種語言的相似之處

<span><span>list_comp</span> = [expression for itemin items]</span>

任務是要替換一個for循環,該循環將項目添加到列表中。

new_list = []
for item in old_list:
    new_list.append(item**2)
關注公衆號:編程學習營,送Python入門學習資料+源碼+思維導圖

1.調用名爲new_list is calledt

2. for循環遍歷舊列表中的項目

3.使用添加方法將item ** 2添加到新列表中

目前爲止很簡單。

列表推導如下所示

<span><span>new_list</span> = [item**<span>2</span> for item inold_list]</span>
關注公衆號:編程學習營,送Python入門學習資料+源碼+思維導圖

1.將表達式item ** 2作爲要添加到列表中的表達式,這首先出現在列表推導式中。

2.之後的for循環是要迭代的循環

3.將其括在方括號中併爲其分配變量new_list意味着,爲循環的每個項目將表達式item ** 2添加到new_list中。

沒有附加方法或是不需要,一行代碼正適合!爲了選擇要添加的內容,甚至可以添加條件語句。此功能還擴展到集合和詞典!甚至可以使用嵌套的for循環編寫列表推導式!

請注意,可能會出現過度使用的情況!僅當列表循環很簡單並且明確要創建列表時,纔會使用列表推導。

來源:Pexels

2.生成器表達式——節省內存使用量

當擁有大量數據集並需要對其進行迭代或從中獲取結果,卻無法將所有數據存儲在內存中時,應想到生成器函數。除了不返回而爲關鍵字yield進行切換操作,生成器函數非常像一個函數。

生成器函數創建了迭代器,而迭代器需要強制輸出它所擁有的值。它們不會在列表或集合中存儲對象。一次也只輸出一項。這稱爲延遲循環。因此,讀取大文件時使用生成器。

def gen(n):                           
 
   while True:
 
       yield n
 
       n += 1                                                      G = gen(3)     # starts at 3
 
print(next(G)) # 3
 
print(next(G)) # 4
 
print(next(G)) # 5
 
print(next(G)) # 6

1.創建函數gen

2. Yield關鍵字存儲值n,一直保留到調用next()方法爲止

3.使用賦值運算符,將1加到n

4.這是一個無限循環,並一直持續

5.調用next()方法,它將繼續輸出值

現在,這些值不會被存儲,只有在調用next()方法時纔會跳出。生成器創建一個迭代器,然後依賴next()方法輸出值。

當有一個大數據集並且想要流式傳輸數據而不會使內存溢出時,這將很有用。

3.使用zip迭代兩個對象

經常想迭代多個對象,以便能從每個對象中收集數據。Zip是允許執行此操作的函數!如果需要迭代充分理解文件名及其對應的鏈接,可以這樣做。

for file_name, link in zip(names, links):
 
   print(file_name, link)

這將同時進入兩個對象,返回一個元組以及每個元組中的對應項。在循環中,將元組解壓爲單獨的值file_name和link. zip()。可以根據需要選擇任意數量的集合,但是當最短的集合用盡時它將停止。

通過本文提及的列表推導式,Zip函數可用於迭代同一對象中的成對元素。

例如:

<span>differences = [next_el - elt <span>for</span> el, next_el <span>in</span> <span>zip</span>(items, items[<span>1</span>:])</span>

4.計數器——生成對象的計數

來源:Pexels

計數器是字典的一個子類,其中對象的元素是鍵,而對象中項目的計數是值。它對計算對象的數量有效。訪問計數器時需要導入內置的collections模塊。

假設要計算列表中所有出現的字符串。

import collections
counts = Counter([ Fred ,  Samantha ,  Jean-Claude ,  Samantha ])
print(counts)

輸出:

<span>Counter({<span> Samantha </span>: <span>2</span>, <span> Fred </span>:<span>1</span>, <span> Jean-Claude </span>: <span>1</span>})</span>

計數器類的優點是可以對其進行更新,並且可以使用字典API來訪問值。

from collections import Counter
c = Counter( abcdaab )for letter in  abcde :
    print(letter, : , c[letter])

輸出:

a : 3
b : 2
c : 1
d : 1
e : 0

1.使用字符串“ abcdaab”將c分配給Counter子類。計數器類提供每個字符的單獨計數。c [item]可以像字典一樣被訪問。

2.for循環,用於迭代字符串“abcde”,併爲每個字符串分配letter。

3.輸入字符串字符,打印可變letter並可以像字典一樣。每個字母的計數由c [letter]訪問。

5.鏈接多個集合

來源:Pexels

如需一次迭代多個集合,則itertools模塊中的鏈接方法是實現這一目標的好方法。

for name in itertools.chain(first_name_list, second_name_list):
 
  create_person(name)

在耗盡之前,這將迭代第一個集合,然後繼續進行下一個,依此類推。

希望您喜歡這篇文章。

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