作者 | Enoch CK
譯者 | 劉暢
整理 | Jane
出品 | Python大本營
【導語】無論你是一位高級的AI工程師還是學生,你都會在工作或學習過程中需要用到 Python。自 1991 年首次發布後,Python 很快就成為了程式設計師和技術人員最喜歡的語言。作為一種擁有相對簡單語法的高級解釋語言,Python 成為了大家的不二之選。 一些集成的 Python 庫也被應用在各個領域,如生物信息學(biopython),數據科學(pandas),機器學習(keras / tensorflow)甚至天文學(astropy)。儘管 Python 的執行速度比Java或其他語言慢得多,但無可否認它提高了工作效率。
(圖片來源:原文引用自 Stack Overflow)
在這篇文章中,作者總結了在 Python 編程過程 5 個有助於提高編碼效率的編程技巧。希望大家在改進代碼時,這篇文章能提供一絲靈感。
技巧一:使用單行(one-liners)簡化語句
每次看到那麼多行的條件語句的時候,是不是都覺得頭好痛? 如果簡單一些的還好說,能找出不同條件下的關係,但是複雜的簡直就是要迷失自我了。今天給大家介紹的 Python 單行功能也許能幫你解決這個困擾。例如,條件語句:
1>>> if alpha > 7:2>>> beta = 9993>>> elif alpha == 7:4>>> beta = 995>>> else:6>>> beta = 0
可以簡化為:
1>>> beta = 999if alpha > 7else (beta == 99if alpha == 7else0)
是不是很神奇! 如果仔細檢查我們寫的代碼,一定可以找到能簡化的代碼。除了條件語句之外,for 循環也可以簡化。 例如,將整數列表加倍:
1>>> lst = [1, 3, 5]2>>> doubled = [] 3>>> for num in lst:4>>> doubled.append(num*2)
可以簡化為一行:
1>>> doubled = [num * 2for num in lst]
當然,如果將所有內容都連結成一行,可能會有點麻煩。同時,還要確保你的代碼中沒有過度使用單行代碼。
技巧二:字符串快速操作
要反轉字符串,我們只需添加 ::-1 作為列表索引,就可以讓你的工作非常輕鬆。
1>>> a = "ilovepython"2>>> print a[::-1] 3nohtypevoli
同樣的技巧也可以應用於整數列表。在 Python 中,字符串操作非常簡單。 例如,如果要使用以下的預定義變量 str1、str2 和 lst3 來輸出一個句子。
1>>> str1 = "Totally"2>>> str2 = "Awesome"3>>> lst3 = ["Omg", "You", "Are"]
只需使用.join()方法和算術運算符即可創建所需的句子。
1>>> print' '.join(lst3)2Omg You Are3>>> print' '.join(lst3)+' '+str1+' '+str24Omg You Are Totally Awesome
除了字符串操作,還建議大家了解更多有關正則表達式的方法,以便更有效地搜索字符串和過濾模式。
技巧三:嵌套的列表組合
itertools 是我最喜歡的 Python 庫之一。試想一下,你的代碼中有十幾個列表,經過一些操作後,會得到一個深度嵌套的列表。 itertools 正是用來解決語法混亂的工具。
1>>> import itertools2>>> flatten = lambda x: list(itertools.chain.from_iterable(x))3>>> s = [['"', 'An', 'investment'], ['in'], ['knowledge'], ['pays'], ['the', 'best'], ['interest."', '--'], ['Benjamin'], ['Franklin']]4>>> print(' '.join(flatten(s)))5" An investment in knowledge pays the best interest." -- Benjamin Franklin
從上面的例子中可以看出,我們可以使用 .join()和 itertools 方法來組合嵌套的列表和字符串。itertools 中的 .combinations()方法可以用於從輸入迭代中返回元素的長度子序列。
技巧四:簡單的數據結構
回到技巧一,可以非常容易的使用單行程序來初始化Python中的數據結構。 Harold Cooper 使用以下代碼實現了單行樹結構:
1>>> deftree():return defaultdict(tree)
上面顯示的代碼只是定義了一個默認值為樹的字典。
1>>> reduce( (lambda r,x: r-set(range(x**2,N,x)) if (x in r) else r), range(2,N), set(range(2,N)))
Python 還擁有一個強大的庫,如 Collections,它可以幫助您解決各種現實問題,不用編寫冗長的代碼。
1>>> from collections import Counter2>>> myList = [1,1,2,3,4,5,3,2,3,4,2,1,2,3]3>>> print(Counter(myList))4Counter({2: 4, 3: 4, 1: 3, 4: 2, 5: 1})
技巧五:輕鬆列印(print)
最後分享給大家的是,我希望自己能在學習初期的時候就知道的一個技巧。 我們不需要使用 .join()和循環,就可以列印一個帶有字符串的數組。
1>>> row = ["1", "bob", "developer", "python"]2>>> print(','.join(str(x) for x in row))31,bob,developer,python
單行代碼則如下:
1>>> print(*row, sep=',')21,bob,developer,python
另一個巧妙的列印技巧是使用枚舉。 enumerate 是Python的內置函數,非常有用。 因此,不需要寫如下一個四行代碼:
1>>> iterable = ['a','b','c']2>>> c = 03>>> for item in iterable: 4>>> print c, item 5>>> c+= 160 a71 b82 c
只需兩行就可以完成同樣的工作:
1>>> for c, item in enumerate(iterable):2>>> print c, item
Python 中有成千上萬的列印技巧,比如 pprint,以後還可以再與大家進行分享。
本次內容就先為大家介紹這五個技巧。 如果你還知道其他的Python技巧,也可以留言和大家一起分享。
原文連結:https://towardsdatascience.com/five-python-tricks-you-need-to-learn-today-9dbe03c790ab