Python片段,,可以作為您日常工作的參考 Python是增長最快的編程語言,。《福布斯》的最新報告指出,,Python去年增長了456%,。Netflix使用Python,IBM使用Python,,其他數(shù)百家公司都使用Python,。讓我們不要忘記Dropbox。Dropbox也是用Python創(chuàng)建的,。根據(jù)Dice的研究,, Python也是擁有的最熱門的技能之一,并且根據(jù)“編程語言索引的流行度”,,它也是世界上最受歡迎的編程語言,。 與其他編程語言相比,Python提供的一些優(yōu)勢是:
Python技巧和竅門 在本文中,,我將介紹10個有用的代碼提示和技巧,,它們可以幫助您完成日常任務。 1.連接字符串 當需要連接字符串列表時,,可以使用for循環(huán)通過逐個添加每個元素來實現(xiàn)此目的,。然而,,如果列表很長的話這將是非常低效的。在Python中,,字符串是不可變的,,因此對于每一對連接,左,、右字符串都必須復制到新字符串中,。 更好的方法是使用join()如下所示的函數(shù): characters = ['p', 'y', 't', 'h', 'o', 'n'] word = ''.join(characters) print(word) # python 2.使用列表推導 列表推導用于從其他可迭代對象創(chuàng)建新列表。當列表推導返回列表時,,它們由包含表達式的方括號組成,,該表達式針對每個元素以及for循環(huán)遍歷每個元素。列表推導速度更快,,因為它已針對Python解釋器進行了優(yōu)化,,以便在循環(huán)期間發(fā)現(xiàn)可預測的模式。 作為示例,,讓我們使用列表推導找到前五個整數(shù)的平方,。 m = [x ** 2 for x in range(5)] print(m) # [0, 1, 4, 9, 16] 現(xiàn)在,讓我們使用列表推導從兩個列表中查找公用數(shù)字 list_a = [1, 2, 3, 4] list_b = [2, 3, 4, 5] common_num = [a for a in list_a for b in list_b if a == b] print(common_num) # [2, 3, 4] 3. enumerate()迭代 Enumerate()方法的作用是向可迭代對象添加一個計數(shù)器,,并以枚舉對象的形式返回它,。 讓我們來解決一個經(jīng)典的編碼面試問題,它通常被稱為Fizz Buzz問題,。 編寫一個程序來輸出列表中的數(shù)字,,以“ 3”的倍數(shù)輸出“fizz”而不是數(shù)字,以“ 5”的倍數(shù)輸出“buzz”,,并以3和5的倍數(shù)輸出“fizzbuzz” ,。 numbers = [30, 42, 28, 50, 15] for i, num in enumerate(numbers): if num % 3 == 0 and num % 5 == 0: numbers[i] = 'fizzbuzz' elif num % 3 == 0: numbers[i] = 'fizz' elif num % 5 == 0: numbers[i] = 'buzz' print(numbers) # ['fizzbuzz', 'fizz', 28, 'buzz', 'fizzbuzz'] 4.在處理列表時使用ZIP 假設(shè)你被分配了一個任務,要把幾個長度相同的列表組合起來并輸出結(jié)果,?同樣,,這里有一個更通用的方法來獲得所需的結(jié)果,利用zip(),,如下面的代碼所示: countries = ['France', 'Germany', 'Canada'] capitals = ['Paris', 'Berlin', 'Ottawa'] for country, capital in zip(countries,capitals): print(country, capital) # France Paris #Germany Berlin #Canada Ottawa 5.使用itertools Python itertools模塊是用于處理迭代器的工具的集合,。itertools具有用于生成可迭代輸入數(shù)據(jù)序列的多種工具。在這里我將使用itertools.combinations()作為一個例子,。itertools.combinations()用于構(gòu)建組合,。這些也是輸入值的可能分組。 讓我們以一個真實的例子來說明以上幾點,。 假設(shè)有四支球隊參加比賽,。在聯(lián)賽階段,每支球隊都要與其他球隊對抗。您的任務是建立所有可能相互比賽的團隊,。 讓我們看一下下面的代碼: import itertools friends = ['Team 1', 'Team 2', 'Team 3', 'Team 4'] list(itertools.combinations(friends, r=2)) # [('Team 1', 'Team 2'), ('Team 1', 'Team 3'), ('Team 1', 'Team 4'), ('Team 2', 'Team 3'), ('Team 2', 'Team 4'), ('Team 3', 'Team 4')] 需要注意的重要一點是值的順序無關(guān)緊要,。因為('Team 1', 'Team 2')和('Team 2', 'Team 1')代表同一對,所以輸出列表中將僅包含其中一個,。同樣,,我們可以使用itertools.permutations()模塊中的其他函數(shù)。 6.使用Python Collections Python Collections是數(shù)據(jù)類型集合,,即列表,,集合,元組,,字典,。Collections模塊提供了可以增強代碼的高性能數(shù)據(jù)類型,使代碼更簡潔,、更簡單,。Collections模塊提供了很多函數(shù)。 Counter()函數(shù)接受一個可迭代的對象(例如列表或元組),,并返回一個Counter Dictionary,。Dictionary的鍵將是迭代器中存在的唯一元素,每個鍵的值將是迭代器中存在的元素的計數(shù),。 要創(chuàng)建一個counter對象,,請將一個iterable (list)傳遞給counter()函數(shù),如下面的代碼所示,。 from collections import Counter count = Counter(['a','b','c','d','b','c','d','b']) print(count) # Counter({'b': 3, 'c': 2, 'd': 2, 'a': 1}) 7.將兩個列表轉(zhuǎn)換成字典 假設(shè)我們有兩個列表,,一個列表包含學生的姓名,第二個列表包含他們的分數(shù),。讓我們看看如何將這兩個列表轉(zhuǎn)換為一個字典。使用zip函數(shù),,可以使用以下代碼完成此操作: students = ['lilei', 'hanmeiemi', 'xiaoming'] marks = [84, 65, 77] dictionary = dict(zip(students, marks)) print(dictionary) #{'lilei': 84, 'hanmeiemi': 65, 'xiaoming': 77} 8.使用Python Generators Generator函數(shù)允許您聲明一個行為類似迭代器的函數(shù),。它們允許程序員以一種快速、簡單和干凈的方式創(chuàng)建迭代器,。讓我們以一個例子來解釋這個概念,。 我們必須遍歷大量數(shù)字(例如100000000),并將所有數(shù)字的平方存儲在單獨的列表中,。 看起來很簡單吧,?使用列表推導很容易做到這一點,但是問題是輸入量很大,。作為示例,,讓我們看下面的代碼: import memory_profiler import time def check_even(numbers): even = [] for num in numbers: if num % 2 == 0: even.append(num*num) return even if __name__ == '__main__': m1 = memory_profiler.memory_usage() t1 = time.clock() cubes = check_even(range(100000000)) t2 = time.clock() m2 = memory_profiler.memory_usage() time_diff = t2 - t1 mem_diff = m2[0] - m1[0] print(f'It took {time_diff} Secs and {mem_diff} Mb to execute this method') #It took 13.6914723 Secs and 1932.2265625 Mb to execute this method 在增加我們需要求和的理想數(shù)時,我們意識到該方法由于更高的計算時間而不可行。這是Python Generator提供幫助的地方,。用括號替換括號后,,我們將Generator推導更改為Generator表達式。現(xiàn)在,,我們來計算花費的時間 import memory_profiler import time def check_even(numbers): for num in numbers: if num % 2 == 0: yield num * num if __name__ == '__main__': m1 = memory_profiler.memory_usage() t1 = time.clock() cubes = check_even(range(100000000)) t2 = time.clock() m2 = memory_profiler.memory_usage() time_diff = t2 - t1 mem_diff = m2[0] - m1[0] print(f'It took {time_diff} Secs and {mem_diff} Mb to execute this method') #It took 1.34e-05 Secs and 0.01953125 Mb to execute this method 我們可以看到,,所花費的時間已大大減少。對于較大的輸入,,此效果將更加明顯,。生成器僅按需工作,這就是所謂的通過惰性評估工作,。這意味著它們可以節(jié)省CPU,,內(nèi)存和其他計算資源。 9.從函數(shù)返回多個值 Python能夠從函數(shù)調(diào)用中返回多個值,,這是許多其他流行的編程語言所缺少的,。在這種情況下,返回值應為逗號分隔的值列表,,然后Python構(gòu)造一個tuple并將其返回給調(diào)用方,。作為示例,請參見下面的代碼: def multiplication_division(num1, num2): return num1*num2, num1/num2 product, division = multiplication_division(15, 3) print('Product=', product, 'Quotient =', division) # Product= 45 Quotient = 5.0 10.使用sorted()函數(shù) 在Python中,,使用內(nèi)置的sort()方法對任何序列進行排序非常簡單,,該方法為您完成了所有繁重的工作。sorted()對任何序列(列表,,元組)進行排序,,并始終以排序方式返回包含元素的列表。讓我們以一個示例來對數(shù)字列表進行升序排序,。 sorted([3,5,2,1,4]) # [1, 2, 3, 4, 5] 再舉一個例子,,讓我們以降序和升序?qū)ψ址斜磉M行排序。 sorted(['france', 'germany', 'canada', 'india', 'china'], reverse=True) # ['india', 'germany', 'france', 'china', 'canada'] sorted(['france', 'germany', 'canada', 'india', 'china'], reverse=False) # ['canada', 'china', 'france', 'germany', 'india'] 結(jié)論 在本文中,,我介紹了10條Python技巧和竅門,,可以將它們用作日常工作的參考。 著作權(quán)歸作者所有
|
|