隨著深度學習、機器學習等技術的火熱發展,python 作為一種面向對象的動態類型語言也跟著火了起來。不少計算機科班出身的同學,在大學期間學習的多是 C++或 java,雖然轉向 Python 難度并不大,但是有些 Python 使用的小技巧,由于受限于 C++和 java 思維的限制,可能不會往那方面去想(畢竟當我知道了一些 Python 的技巧之后,直接驚嘆“臥槽,還能這樣搞?!”)
元素互換
之前,我們在給 a 和 b 交換值時,通常的操作是:
a = 10b = 5temp = aa = bb = temp
Python 將這一操作簡單化了
a = 10b = 5a,b = b,a
列表解析
列表解析是 Python 迭代機制的一種騷操作。有這樣一個任務,給定一個由正整數組成的 list,然后刪除里面的偶數。比如a = [1,2,3,4,5,6,8],注意這里我很騷的取了[1,2,3,4,5,6,8]而不是[1,2,3,4,5,6,7]。你會怎么做?
a = [1,2,3,4,5,6,8]for item in a: if item%2==0: a.remove(item)
輸出是[1,3,5,8],并沒有成功,是不是?如果你拿[1,2,3,4,5,6,7]作為例子,返回的結果確實是你想要的結果,但是那只是巧了。
python 怎么做呢?
a = [1,2,3,4,5,6,8]a = [item for item in a if item%2 != 0]
是不是騷的很?
Counter
from collections import Countera = ['a', 'a', 'a', 'b', 'b', 'c']ptiny(dict(Counter(a)))
輸出為:
{'a': 3, 'b': 2, 'c': 1}
Counter 可以幫助我們自動的去統計一個 list 中各個元素的個數。這個在哪里常用呢?在我們 NLP 中統計詞頻時會經常用到,至少筆者是喜歡用這個函數的。
zip 函數
先上代碼:
a = [1,2,3]b = ['a','b','c']for x, y in zip(a,b): print (x, y)
輸出為
1 a2 b3 c
這個有什么用呢?在用 Python 做深度學習或機器學習時,需要構造訓練樣本和標簽,那么我們有時可能會逐條獲取一條訓練數據,通過迭代 zip,就能一條一條的成對取出數據了。當然了,zip()中可以添加任意多個可迭代的元素,不僅僅限于例子中的兩個。
exec
這是我接觸 Python 以來,見到的最騷最騷的操作了,而且是我在學習 java 時就夢寐以求的操作:我希望我能動態輸入一段代碼(字符串),然后程序可以運行之。學過 java 的人都知道,這是不行的,但是尼瑪 python 就行。
code = """from collections import Countera = ['a', 'a', 'a', 'b', 'b', 'c']print(dict(Counter(a)))"""exec(code)
大家可以試一下,真的可以。騷出天際了。
當然了,你的確可以通過動態輸入的方式,讓其運行字符串代碼,比如:
code = input()
然后你輸入from collections import Counter; a = ['a', 'a', 'a', 'b', 'b', 'c']; print(dict(Counter(a)))輸入的字符串中,每一句代碼之間用分號;分割,這一點和 java 們很像。然后再運行
exec(code)
會得到同樣的結果。這個操作大家在用 python 做科學計算的時候,可能用不到,但是當你用 python 寫項目的時候,可能就能派上用場了。
怎么樣,python 的這些騷操作,你都了解了嗎?
-
C++
+關注
關注
22文章
2110瀏覽量
73689 -
機器學習
+關注
關注
66文章
8422瀏覽量
132742 -
python
+關注
關注
56文章
4797瀏覽量
84776
原文標題:騷操作又來了,實用的python“奇技淫巧”
文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論