<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          10個(gè)Python技巧,現(xiàn)學(xué)現(xiàn)用!

          共 4788字,需瀏覽 10分鐘

           ·

          2020-04-02 23:26


          原文標(biāo)題:10 Python Tips and Tricks You Should Learn Today,

          作者:Abhinav Sagar

          點(diǎn)擊上方Python知識(shí)圈,選擇設(shè)為星標(biāo)

          回復(fù)1024獲取Python資料



          閱讀文本大概需要 3?分鐘


          點(diǎn)擊「閱讀原文」查看pk哥原創(chuàng)精品視頻。
          據(jù)Stack Overflow聲稱,Python是增長(zhǎng)最快的編程語(yǔ)言。《福布斯》的最新文章稱,Python去年的增長(zhǎng)幅度高達(dá)456%。Netflix使用Python,IBM使用Python另外成百上千家公司都在使用Python。別忘了Dropbox。Dropbox也是用Python開發(fā)的。據(jù)Dice的研究顯示,Python也是熱門的必備技能之一;從《編程語(yǔ)言人氣指數(shù)》來看,它也是世界上最受歡迎的編程語(yǔ)言。

          與其他編程語(yǔ)言相比,Python具有的一些優(yōu)點(diǎn)包括:
          • 與主要的平臺(tái)和操作系統(tǒng)兼容
          • 有許多開源框架和工具
          • 可讀且可維護(hù)的代碼
          • 強(qiáng)大的標(biāo)準(zhǔn)庫(kù)
          • 標(biāo)準(zhǔn)的測(cè)試驅(qū)動(dòng)型開發(fā)

          本文將介紹10個(gè)實(shí)用的代碼技巧,它們可幫助你完成日常任務(wù)。

          1. 連接字符串
          你需要連接字符串列表時(shí),可以通過逐個(gè)添加每個(gè)元素、使用for loop來實(shí)現(xiàn)此目的。但這么做效率很低,列表很長(zhǎng)的話更是如此。在Python中,字符串不可變,因此對(duì)于每一對(duì)連接而言,必須將左右字符串復(fù)制到新字符串中。
          一種更好的方法是使用join()函數(shù),如下所示:
          characters = ['p', 'y', 't', 'h', 'o', 'n'] word = "".join(characters)  print(word) # python


          2. 使用列表推導(dǎo)
          列表推導(dǎo)用于從其他可迭代對(duì)象(iterable)創(chuàng)建新列表。列表推導(dǎo)返回列表時(shí),它們由包含表達(dá)式的方括號(hào)組成,該表達(dá)式針對(duì)每個(gè)元素連同for loop加以執(zhí)行,以便對(duì)每個(gè)元素執(zhí)行迭代處理。列表推導(dǎo)速度更快,因?yàn)樗槍?duì)Python解釋器進(jìn)行了優(yōu)化,以便循環(huán)期間發(fā)現(xiàn)可預(yù)測(cè)的模式。
          比如,假設(shè)使用列表推導(dǎo)來查找前五個(gè)整數(shù)的平方。

          m = [x ** 2 for x in range(5)]  print(m) # [0, 1, 4, 9, 16]

          現(xiàn)在,假設(shè)使用列表推導(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]


          3. 用enumerate()進(jìn)行迭代
          enumerate()方法為可迭代對(duì)象添加一個(gè)計(jì)數(shù)器,并以枚舉對(duì)象的形式返回。不妨解決通常名為Fizz Buzz問題的經(jīng)典編碼面試問題。
          編寫一個(gè)程序來打印輸出列表中的數(shù)字;如果是“3”的倍數(shù),輸出“fizz”,而不是輸出數(shù)字;如果是“5”的倍數(shù),輸出“buzz”;如果同時(shí)是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. 處理列表時(shí)使用zip
          假設(shè)你被賦予一項(xiàng)任務(wù),合并長(zhǎng)度相同的多個(gè)列表,并打印輸出結(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模塊是用于處理迭代器(iterator)的一系列工具。迭代器有多個(gè)工具可用于生成輸入數(shù)據(jù)的可迭代對(duì)象序列。此處以itertools.combinations()為例。itertools.combinations()用于構(gòu)建組合。這些也是輸入值的可能分組。
          不妨舉一個(gè)實(shí)際例子來闡明上面這點(diǎn)。
          假設(shè)四支球隊(duì)參加比賽。在小組賽階段,每支球隊(duì)與另外每支球隊(duì)對(duì)抗。你的任務(wù)是為彼此對(duì)抗的每支球隊(duì)排出所有可能的組合。
          不妨看一下以下代碼:

          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')]

          要注意的重要一點(diǎn)是,值的順序并不重要。由于('Team 1','Team 2')和('Team 2','Team 1')代表同一對(duì),所以輸出列表中僅包含其中一個(gè)。同樣,我們可以使用itertools.permutations()以及該模塊中的其他函數(shù)。

          6. 使用Python集合
          Python集合是容器數(shù)據(jù)類型,即列表、組集、元組和字典。集合模塊提供了高性能的數(shù)據(jù)類型以改進(jìn)你的代碼,大大簡(jiǎn)化任務(wù)。集合模塊提供了許多函數(shù)。我在此處將使用Counter()函數(shù)。
          Counter()函數(shù)拿來可迭代對(duì)象(比如列表或元組)后返回Counter Dictionary。字典的鍵將是可迭代對(duì)象中的獨(dú)特元素,而每個(gè)鍵的值將是可迭代對(duì)象中的元素計(jì)數(shù)。
          想創(chuàng)建counter對(duì)象,將可迭代對(duì)象(列表)傳遞給Counter()函數(shù),如以下代碼所示:

          from collections import Countercount = Counter(['a','b','c','d','b','c','d','b'])  print(count) # Counter({'b': 3, 'c': 2, 'd': 2, 'a': 1})


          7. 將兩個(gè)列表轉(zhuǎn)換成字典
          假設(shè)我們有兩個(gè)列表,一個(gè)列表包含學(xué)生的姓名,第二個(gè)列表包含學(xué)生的分?jǐn)?shù)。不妨看看如何將這兩個(gè)列表轉(zhuǎn)換成一個(gè)字典。使用zip函數(shù),可以使用以下代碼完成此操作:
          students = ["Peter", "Julia", "Alex"]  marks = [84, 65, 77]  dictionary = dict(zip(students, marks))  print(dictionary) # {'Peter': 84, 'Julia': 65, 'Alex': 77}


          8. 使用Python生成器
          生成器函數(shù)讓你可以聲明行為類似迭代器的函數(shù)。它們讓程序員能夠以快速、簡(jiǎn)單和簡(jiǎn)潔的方式生成迭代器。不妨舉例解釋這個(gè)概念。
          假設(shè)你需要為前100000000個(gè)完美平方數(shù)求總和,從1開始。
          是不是看起來很簡(jiǎn)單?使用列表推導(dǎo)很容易做到這一點(diǎn),但問題是輸入量很大。不妨看看以下代碼:

          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") # It took 13.197494000000006 Secs to execute this method

          增加需要求和的完美平方數(shù)時(shí),我們意識(shí)到:由于較長(zhǎng)的計(jì)算時(shí)間,這個(gè)方法行不通。這時(shí)候Python生成器可助一臂之力。將方括號(hào)換成圓括號(hào)后,我們將列表推導(dǎo)變成了生成器表達(dá)式。現(xiàn)在不妨計(jì)算所花的時(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") # It took 9.53867000000001 Secs to execute this method


          可以看到,所花的時(shí)間已大幅縮短。如果是更龐大的輸入,這個(gè)效果會(huì)更顯著。



          9. 從函數(shù)返回多個(gè)值
          Python能夠從函數(shù)調(diào)用返回多個(gè)值,這是許多其他流行的編程語(yǔ)言缺少的功能。在這種情況下,返回值應(yīng)是逗號(hào)分隔的值列表,然后Python構(gòu)造一個(gè)元組并將其返回給調(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中對(duì)任何序列進(jìn)行排序很容易,只需使用內(nèi)置方法sorted(),它為你完成了所有棘手的工作。sorted()可對(duì)任何序列(列表和元組)進(jìn)行排序,始終返回元素以排序的方式顯示的列表。不妨看看對(duì)數(shù)字列表進(jìn)行升序排序。
          sorted([3,5,2,1,4]) # [1, 2, 3, 4, 5]

          另舉一個(gè)例子,對(duì)字符串列表進(jìn)行降序排序。

          sorted(['france', 'germany', 'canada', 'india', 'china'], reverse=True) # ['india', 'germany', 'france', 'china', 'canada']


          2f6af2c845633f307d0d479c465e0fd1.webp

          -----------------------
          公眾號(hào):Python知識(shí)圈(ID:PythonCircle博客:www.pyzhishiquan.com知乎Python知識(shí)圈微信視頻號(hào):菜鳥程序員 (分享有趣的編程技巧、Python技巧)bilibili:菜鳥程序員的日常(目前原創(chuàng)視頻:10,累計(jì)播放量:15萬)

          一個(gè)學(xué)習(xí)Python的人,喜歡分享,喜歡搞事情!長(zhǎng)按下圖二維碼關(guān)注,和你一起領(lǐng)悟Python的魅力


          Python知識(shí)圈公眾號(hào)的交流群已經(jīng)建立,群里可以領(lǐng)取 Python 和人工智能學(xué)習(xí)資料,大家可以一起學(xué)習(xí)交流,效率更高,如果是想發(fā)推文、廣告、砍價(jià)小程序的敬請(qǐng)繞道一定記得備注「交流學(xué)習(xí)」,我會(huì)盡快通過好友申請(qǐng)哦!通過好友后私聊我「學(xué)習(xí)資料」或者「進(jìn)群」都可以。

          掃碼添加,備注:交流學(xué)習(xí)




          往期推薦01

          公眾號(hào)所有文章匯總導(dǎo)航(2-10更新)

          02

          微博5.38億條用戶數(shù)據(jù)暗網(wǎng)出售, 你的信息一毛不值!

          03

          130 個(gè)相見恨晚的神器網(wǎng)站


          朕已閱

          246140395f58ebe9923ad528f1e67d84.webp

          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  高清无码啪啪视频 | 爱爱短视频电影无码免费 | 欧美色图15p | 成人77777 | 欧美黄在线观看 |