十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
這篇文章主要講解了“Python語(yǔ)言的10個(gè)小技巧分享”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Python語(yǔ)言的10個(gè)小技巧分享”吧!
創(chuàng)新互聯(lián)主營(yíng)柯坪網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開(kāi)發(fā),柯坪h5小程序開(kāi)發(fā)搭建,柯坪網(wǎng)站營(yíng)銷推廣歡迎柯坪等地區(qū)企業(yè)咨詢
1. 用ZIP處理列表
假設(shè)要合并相同長(zhǎng)度的列表并打印結(jié)果。同樣有一種更通用的方式,即用zip()函數(shù)獲得想要的結(jié)果,代碼如下:
countries= ['France', 'Germany', 'Canada'] capitals = ['Paris', 'Berlin', 'Ottawa'] for country, capital in zip(countries,capitals): print(country, capital) # FranceParis GermanyBerlin CanadaOttawa
2. 使用python collections
Python collections是容器數(shù)據(jù)類型,即列表、集合、元組、字典。Collections模塊提供了可以增強(qiáng)代碼的高性能數(shù)據(jù)類型,使工作更加簡(jiǎn)潔容易。它還提供了許多功能,以下使用Counter() 函數(shù)進(jìn)行演示。
Counter() 函數(shù)采用一個(gè)可迭代對(duì)象(如列表或元組),并返回一個(gè)Counter字典。字典的鍵是迭代器中唯一存在的元素,每個(gè)鍵的值是該元素在迭代器中出現(xiàn)次數(shù)的計(jì)數(shù)。
為創(chuàng)建一個(gè)Counter對(duì)象,將一個(gè)迭代的(列表)傳遞給Counter()函數(shù),代碼如下。
fromcollections import Countercount = Counter(['a','b','c','d','b','c','d','b']) print(count) # Counter({'b': 3, 'c': 2, 'd': 2, 'a': 1})
3. 使用itertools
Python的itertools模塊是用于處理迭代器的工具集合。Itertools包含多種工具,用于生成輸入數(shù)據(jù)的可迭代結(jié)果。這里以itertools.combinations()為例。itertools.combinations()用于構(gòu)建組合。這些是輸入量的可能組合項(xiàng)。
舉一個(gè)現(xiàn)實(shí)中的例子來(lái)闡明以上觀點(diǎn):
假設(shè)一個(gè)錦標(biāo)賽中有4個(gè)隊(duì)伍,在聯(lián)賽階段,每個(gè)隊(duì)伍都要與其他每個(gè)隊(duì)伍進(jìn)行比賽。任務(wù)是列出所有比賽隊(duì)伍的可能組合。
代碼如下:
importitertools 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')]
需要注意的是,值的順序不重要。因?yàn)?'Team 1', 'Team 2')和('Team 2', 'Team 1')代表同一對(duì),所以輸出列表只需包含其中一個(gè)。相似的,可以使用itertools.permutations()以及來(lái)自該模塊的其他函數(shù)。如需更完整的參考資料,請(qǐng)查閱此教程。
4. 從函數(shù)中返回多個(gè)值
Python可從函數(shù)調(diào)用中返回多個(gè)值,這是許多其他流行編程語(yǔ)言所不具備的功能。在這種情況下,返回值應(yīng)為逗號(hào)分隔的值列表,然后python構(gòu)造一個(gè)元組并返回給調(diào)用方。代碼示例如下:
defmultiplication_division(num1, num2): return num1*num2, num1/num2product,division = multiplication_division(15, 3) print("Product=", product, "Quotient =", division) #Product= 45 Quotient = 5.0
5. 使用列表推導(dǎo)式
列表推導(dǎo)式用于從其他可迭代對(duì)象中創(chuàng)建新列表。列表推導(dǎo)式返回列表時(shí),由包含表達(dá)式的方括號(hào)組成,該表達(dá)式對(duì)于每個(gè)元素以及用于循環(huán)遍歷每個(gè)元素的for循環(huán)執(zhí)行。由于對(duì)python解釋器進(jìn)行了優(yōu)化,可以在循環(huán)期間發(fā)現(xiàn)可預(yù)測(cè)的模式,因此列表推導(dǎo)速度更快。
如下,使用列表推導(dǎo)式計(jì)算前五個(gè)整數(shù)的平方:
m = [x** 2 for x in range(5)] print(m) # [0, 1, 4, 9, 16]
再如,使用列表推導(dǎo)式查找兩個(gè)列表中的公共數(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]
6. 將兩個(gè)列表轉(zhuǎn)換為一個(gè)字典
假設(shè)有兩個(gè)列表,一個(gè)列表內(nèi)容為學(xué)生姓名,另一個(gè)內(nèi)容為學(xué)生分?jǐn)?shù)。使用zip函數(shù),將這兩個(gè)列表轉(zhuǎn)換為一個(gè)字典,代碼如下:
students= ["Peter", "Julia", "Alex"] marks = [84, 65, 77] dictionary = dict(zip(students, marks)) print(dictionary) # {'Peter': 84, 'Julia': 65, 'Alex': 77}
7. 字符串拼接
拼接字符串時(shí)可用for循環(huán)來(lái)逐個(gè)添加元素,但這非常低效(特別是當(dāng)列表很長(zhǎng)時(shí))。在python中,字符串是不可變的,因此拼接字符串時(shí),必須將左、右字符串復(fù)制到新的字符串中。
更好的方法是使用join() 函數(shù),如下所示:
characters= ['p', 'y', 't', 'h', 'o', 'n'] word = "".join(characters) print(word) # python
8. 使用sorted()函數(shù)
在python中使用內(nèi)置函數(shù)sorted()可以輕而易舉地對(duì)任何序列進(jìn)行排序,它能完成很多艱難的工作。sorted()可對(duì)任何序列(列表、元組)進(jìn)行排序,并返回已排序的元素列表。如下對(duì)數(shù)字進(jìn)行升序排列:
sorted([3,5,2,1,4])# [1, 2, 3, 4, 5]
如下對(duì)字符串進(jìn)行降序排列:
sorted(['france','germany', 'canada', 'india', 'china'], reverse=True) # ['india', 'germany','france', 'china', 'canada']
9. 用enumerate()迭代
Enumerate()方法向可迭代對(duì)象添加一個(gè)計(jì)數(shù)器,并以枚舉對(duì)象的形式返回。
以下是一個(gè)經(jīng)典的編碼方面的面試問(wèn)題(通常被稱為Fizz Buzz問(wèn)題)。
編寫(xiě)一個(gè)程序來(lái)打印列表中的數(shù)字。若數(shù)字是3的倍數(shù),輸出“fizz”;是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']
10. 使用python generators(生成器)
generator函數(shù)允許創(chuàng)建類似迭代器的函數(shù)。他們?cè)试S程序員以一種簡(jiǎn)單快速的方式創(chuàng)建迭代器。下面通過(guò)一個(gè)例子來(lái)解釋這個(gè)概念。
假設(shè)要對(duì)從1開(kāi)始的前100000000個(gè)完全平方數(shù)求和。
看起來(lái)很容易對(duì)吧。使用列表推導(dǎo)式可以很輕松的做到這一點(diǎn),但是它的輸入量過(guò)大。下面為一示例:
t1 =time.clock() sum([i * i for i in range(1, 100000000)]) t2 = time.clock() time_diff = t2 - t1 print(f"It took {time_diff} Secs to execute this method") # Ittook 13.197494000000006 Secs to execute this method
在增加求和的完全平方數(shù)時(shí),由于需要大量計(jì)算時(shí)間,這種方法并不夠靈活。這時(shí)python生成器就派上用場(chǎng)了。將方括號(hào)替換為圓括號(hào)后,列表推導(dǎo)式更改為生成器表達(dá)式?,F(xiàn)在計(jì)算花費(fèi)的時(shí)間:
t1 = time.clock() sum((i * i for i in range(1, 100000000))) t2 = time.clock() time_diff = t2 - t1 print(f"It took {time_diff} Secs to execute this method") # Ittook 9.53867000000001 Secs to execute this method
感謝各位的閱讀,以上就是“Python語(yǔ)言的10個(gè)小技巧分享”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Python語(yǔ)言的10個(gè)小技巧分享這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!