可現學現用的10個Python技巧

2020-12-21 51CTO

據Stack Overflow聲稱,Python是增長最快的程式語言。《福布斯》的最新文章稱,Python去年的增長幅度高達456%。Netflix使用Python,IBM使用Python另外成百上千家公司都在使用Python。別忘了Dropbox。Dropbox也是用Python開發的。據Dice的研究顯示,Python也是熱門的必備技能之一;從《程式語言人氣指數》來看,它也是世界上最受歡迎的程式語言。

與其他程式語言相比,Python具有的一些優點包括:

與主要的平臺和作業系統兼容有許多開源框架和工具可讀且可維護的代碼強大的標準庫標準的測試驅動型開發本文將介紹10個實用的代碼技巧,它們可幫助你完成日常任務。

1. 連接字符串

你需要連接字符串列表時,可以通過逐個添加每個元素、使用for loop來實現此目的。但這麼做效率很低,列表很長的話更是如此。在Python中,字符串不可變,因此對於每一對連接而言,必須將左右字符串複製到新字符串中。

一種更好的方法是使用join()函數,如下所示:

characters = ['p', 'y', 't', 'h', 'o', 'n'] word = "".join(characters) print(word) # python

2. 使用列表推導

列表推導用於從其他可迭代對象(iterable)創建新列表。列表推導返回列表時,它們由包含表達式的方括號組成,該表達式針對每個元素連同for loop加以執行,以便對每個元素執行迭代處理。列表推導速度更快,因為它針對Python解釋器進行了優化,以便循環期間發現可預測的模式。

比如,假設使用列表推導來查找前五個整數的平方。

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

現在,假設使用列表推導從兩個列表中查找通用數字:

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()方法為可迭代對象添加一個計數器,並以枚舉對象的形式返回。

不妨解決通常名為Fizz Buzz問題的經典編碼面試問題。

編寫一個程序來列印輸出列表中的數字;如果是「3」的倍數,輸出「fizz」,而不是輸出數字;如果是「5」的倍數,輸出「buzz」;如果同時是3和5的倍數,輸出「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

假設你被賦予一項任務,合併長度相同的多個列表,並列印輸出結果?同樣,有一種更通用的方法獲得所需的結果,只需使用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)的一系列工具。迭代器有多個工具可用於生成輸入數據的可迭代對象序列。此處以itertools.combinations()為例。itertools.combinations()用於構建組合。這些也是輸入值的可能分組。

不妨舉一個實際例子來闡明上面這點。

假設四支球隊參加比賽。在小組賽階段,每支球隊與另外每支球隊對抗。你的任務是為彼此對抗的每支球隊排出所有可能的組合。

不妨看一下以下代碼:

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

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

6. 使用Python集合

Python集合是容器數據類型,即列表、組集、元組和字典。集合模塊提供了高性能的數據類型以改進你的代碼,大大簡化任務。集合模塊提供了許多函數。我在此處將使用Counter()函數。

Counter()函數拿來可迭代對象(比如列表或元組)後返回Counter Dictionary。字典的鍵將是可迭代對象中的獨特元素,而每個鍵的值將是可迭代對象中的元素計數。

想創建counter對象,將可迭代對象(列表)傳遞給Counter()函數,如以下代碼所示:

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. 將兩個列錶轉換成字典

假設我們有兩個列表,一個列表包含學生的姓名,第二個列表包含學生的分數。不妨看看如何將這兩個列錶轉換成一個字典。使用zip函數,可以使用以下代碼完成此操作:

students = ["Peter", "Julia", "Alex"] marks = [84, 65, 77] dictionary = dict(zip(students, marks)) print(dictionary) # {'Peter': 84, 'Julia': 65, 'Alex': 77}

8. 使用Python生成器

生成器函數讓你可以聲明行為類似迭代器的函數。它們讓程式設計師能夠以快速、簡單和簡潔的方式生成迭代器。不妨舉例解釋這個概念。

假設你需要為前100000000個完美平方數求總和,從1開始。

是不是看起來很簡單?使用列表推導很容易做到這一點,但問題是輸入量很大。不妨看看以下代碼:

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 toexecute this method

增加需要求和的完美平方數時,我們意識到:由於較長的計算時間,這個方法行不通。這時候Python生成器可助一臂之力。將方括號換成圓括號後,我們將列表推導變成了生成器表達式。現在不妨計算所花的時間:

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 toexecute this method

可以看到,所花的時間已大幅縮短。如果是更龐大的輸入,這個效果會更顯著。

9. 從函數返回多個值

Python能夠從函數調用返回多個值,這是許多其他流行的程式語言缺少的功能。在這種情況下,返回值應是逗號分隔的值列表,然後Python構造一個元組並將其返回給調用方。 不妨看看以下代碼:

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

Python中對任何序列進行排序很容易,只需使用內置方法sorted(),它為你完成了所有棘手的工作。sorted()可對任何序列(列表和元組)進行排序,始終返回元素以排序的方式顯示的列表。不妨看看對數字列表進行升序排序。

sorted([3,5,2,1,4]) # [1, 2, 3, 4, 5]

另舉一個例子,對字符串列表進行降序排序。

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

相關焦點

  • Python2 已終結,入手Python 3,你需要這30個技巧
    這篇教程有 30 個你會喜歡的方法。勤勞的程式設計師們,這裡有 30 條使用 Python 時實用的建議和小技巧。你可以把讀這篇文章當做工作間隙的小憩,而且我保證你學到的東西會跟工作時一樣多。1./python-data-classes/8.
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    數據科學愛好者 Parul Pandey 在近日發表了一篇博文,分享了在數據科學中非常實用的 10 個小技巧。雷鋒網 AI 科技評論將他的文章編譯整理如下。有時候,一點小小的黑客行為可以節省時間,挽救生命。一個小小的快捷方式或附加組件有時會被證明是天賜之物,並且可以真正提高生產力。所以,下面是我最喜歡的一些技巧,我以本文的形式一起使用和編譯它們。
  • 學python?不是一個python入門教程就行,學之前你必須知道這些
    機器學習:這也是python最有魅力的地方,善於做圖形分析,算法建模等等。所以python在人工智慧,機器學習的領域有著讀到的優勢。既然是就業那麼就要看市場,就是人才需求市場,這裡說的市場當讓是說python人才需求的市場了。說到市場當然python每個方向肯定有市場了,咱們直接看主要矛盾:一個是需求量,另一個是入行的難易程度。python全棧目前是市場的需求量最大,入行也是最容易的。要是為了就業那就先這樣入門入行,就不用想了。看重前景方向:那麼學python大數據分析或是python機器學習。
  • 憲法日,一起來「憲」學現用
    憲法日,一起來「憲」學現用 2020-12-04 18:36 來源:澎湃新聞·澎湃號·媒體
  • Python入門指南教程:10天學會使用python做爬蟲!免費領取!
    前些天我弟弟突然聊天,推薦我學python,我把聊天截圖給了學計算機的楊先生。楊先生的解釋:python和C語言、java一樣是一門程式語言。學會了或許可以三分鐘做好excel的數據分析。但是,為了寫這個三分鐘的程序,你可能要花一個星期的時間。
  • 新手開網店請做好這3點,心態保持好,堅持做,要會現學現用
    哈嘍 大家好 我是小冬哥,10年電商創業,只分享實用的經驗,如果你在開網店的過程中碰到了有不懂的問題,可以先關注我,然後再私信我,今天聊一下,開網店前期的經歷,這是每個人都必須要經歷的,新店把產品上好後,都會面臨,沒有銷量,沒有訪客,更致命的是你的店鋪還是
  • Python編程學了有用嗎?
    Python編程學了有用嗎?眾所周知,目前家長對於孩子的教育越來越重視,培養孩子的編程思維也是大家關心的話題,孩子學習Python語言,需要使用精確到標點、分號等特殊字符,可以提高孩子的編程能力和邏輯思維能力。作為成成年人學python編程可以大大提高工作效率。
  • 10個好用的Python集成開發環境
    Wing IDE分三個版本:免費的基礎版,個人版,以及更強大的專業版。調試功能是Wing IDE的一大亮點,包括多線程調試,線程代碼調試,自動子進程調試,斷點,單步代碼調試,代碼數據檢查等功能,此外還提供了在樹莓派上進行遠程調試的功能。
  • python編程30個常用技巧
    打開APP python編程30個常用技巧 深度學習這件小事 發表於 2020-12-24 15:07:51 10、把原字典的鍵值對顛倒並生產新的字典
  • 開課吧:Python是什麼意思?為什麼有那麼多人學Python?
    python非常容易上手,而且能幹很多事情,WEB開發,機器學習人工智慧,數據分析,量化投資,爬蟲等,基本可以應用到各行各業,而且大家都在做基於PYTHON的庫,使得PYTHON語言變成一門直接拿來就能用的語言,更像一種工具了,比如機器學習,可能理論很複雜,但是實際在PYTHON中僅僅幾行代碼就能實現,不用花太多時間用在碼代碼上面,python 現在是越來越火
  • 5個助你效率提升的python小技巧
    使用交互模式使用python -i xxxx.py可以直接進入python的交互模式,可以很方便的調用xxxx.py中定義的方法和函數,特別適合調試沒有main()方法的文件,強力推薦。使用pdb進行調試很多從c++/java轉到python的同學可能對python沒有斷點功能相當失望。其實python自帶的pdb庫就可以解決這個問題。看這個例子。
  • 如何在Visual Studio調整python可啟動文件
    >python類和對象在Visual Studio開發工具中,創建python應用程式,默認有個python文件,這個為主啟動文件;如果再創建一個python文件,想要運行這個文件,需要將其設置為主啟動文件,就可以調試了。
  • Scratch、Python學哪個?兒童編程怎麼學?全面解析編程(上)
    如果您的小孩準備學習編程或者已經在學編程,建議您認真看完該系列文章,一定會對孩子學習編程有所幫助。本系列文共分為三部分,第一部分講編程是什麼?編程到底學什麼?第二部分講為什麼要學習編程?學習編程,孩子能收穫什麼?第三部分講到底要怎麼學編程?有哪些需要注意的問題。
  • PythonPython100個練手項目
    一鍵生成QQ個人歷史報告    10. 微信公眾號文章爬蟲    11. 新浪微博爬蟲分享(一天可抓取 1300 萬條數據)    12. 新浪微博分布式爬蟲分享    13. python爬蟲教程,帶你從零到一    14.
  • 深圳羅湖python少兒編程課哪裡學比較好?
    成立多年以來,在國內先後成立近500家學習中心,憑藉完善的課程體系、可帶回家的進口教具、開放的教學方式、國際化的賽事體系、周到的教育服務獲得16萬學生家長的認可與青睞,並且還在持續以每年35%左右的增幅增長。孩子學習編程有什麼用?
  • 【老徐說法】「憲」學現用,憲法伴你一生
    【老徐說法】「憲」學現用,憲法伴你一生 2020-12-04 23:32 來源:澎湃新聞·澎湃號·政務
  • 坑爹的Python陷阱
    >[[10], [10], [10], [10], [10], [10], [10], [10], [10], [10]]我猜,這應該不是你預期的結果吧,究其原因,還是因為python中list是可變對象,上述的寫法大家都指向的同一個可變對象,正確的姿勢>>> a = [[] for _ in xrange(10)]>>>
  • 資料|像計算機科學家一樣思考Python(中文版)
    from=leiphonecolumn_res0903內容簡介 · · · · · ·《像計算機科學家一樣思考python》按照培養讀者像計算機科學家一樣的思維方式的思路來教授python語言編程。全書貫穿的主體是如何思考、設計、開發的方法,而具體的程式語言,只是提供一個具體場景方便介紹的媒介。
  • 2天學全Python面試基礎(1)
    通過列出30個python面試問題和答案,本文涵蓋在Python面試中經常問到的問題。如果您是該行業的新手,本基礎篇將極大地幫助您。我們衷心希望這篇文章在準備面試時會有所幫助。Python的需求量很大,必須與成千上萬擁有與python技能的申請人競爭,才能在就業市場中找到工作。
  • Python快速入門的方法
    因為Python簡單,所以學起來快,有編程經驗的程式設計師一周就能上手Python。但是!Python對有基本的程序概念的人來說很簡單,但對於新手來說真不一定算簡單。畢竟,寫起來簡單不代表概念簡單。那麼,作為一個新手,如何才能快速並有效的入門呢?0.快速入門《和孩子一起學編程》這本書說是給兒童設計的,所以內容比較生動。