在本文中,介紹了 5 種方法,也許在入門階段時,我們還不太了解它們,但在實戰中這 5 個技巧非常實用。
以下即五種實用的小技巧:
字串運算字串本質上也是一種元組,但是字串有很多「運算」方式。最直觀的是字串的 + 和 * 運算,它們分別表示重複和連線。
>>> my_string = "hi medium..!"此外,如果希望獲得反向字串,也可以直接使用 [::-1] 進行索引:>>> print(my_string * 2)
hi medium..!hi medium..!
>>> print(my_string + " i love python" * 2)
hi medium..! i love python i love python
>>> print(my_string[::-1])如果列表元素都是字串,那麼我們可以快速地使用 join() 方法將所有元素拼接在一起:!..muidem ih
>>> my_list = [1,2,3,4,5]
>>> print(my_list[::-1])
[5, 4, 3, 2, 1]
>>> word_list = ["awesome", "is", "this"]如上我們使用 .join() 方法拼接列表元素,其中' ' 表示連線方式為空格。其實在自然語言處理中,這個方法會經常使用,例如我們將句子拆分為了字元,那麼處理後的合併就需要使用 join() 了。>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!
列表推導式如果你還不會使用列表推導式,那麼快學起來吧。正如本文作者所言,「當我第一次學到這種方式時,我的整個世界都變了。」列表推導式真的非常強大,它不僅在速度上比一般的方法快,同時直觀性、可讀性都非常強。如果你希望迭代列表做一些運算,那麼快使用它吧。
我們先定義乙個簡單的函式,它會算變數的平方並加 5:
>>> def stupid_func(x):如果我們希望將該函式應用到列表中的奇數項,那麼不採用列表推導式的情況下,我們一般會寫成以下形式:>>> return x**2 + 5
但是現在我們有了列表推導式,那麼上面**可以等價修改為:
>>> my_list = [1, 2, 3, 4, 5]列表推導式的一般語法可以表示為 [ expression for item in list ],如果你希望加上一些布林型條件語句,那麼上面的語法可以修改為 [ expression for item in list if conditional ],它的結構其實和下面是等價的。>>> print([stupid_func(x) for x in my_list if x % 2 != 0])
[6, 14, 30]
>>> for item in list:上面的列表推導式可以進一步簡化,即不需要定義乙個新函式。>>> if conditional:
>>> expression
>>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])lambda 和 maplambda 是一種匿名函式,它看起來可能有一點奇怪,但是一旦你理解了它,那麼它就會變得非常直觀與強大。[6, 14, 30]
一般而言,lambda 函式都比較小,它也不需要定義函式名。那麼為什麼需要匿名函式?簡單而言,lambda 最常執行一些直觀的運算,它並不需要標準的函式定義,而且也不需要新的函式名再次呼叫。
還是拿上面的先平方再加 5 為例,前面我們是定義了乙個標準的函式,def stupid_func(x),現在我們可以試試 lambda 匿名函式:
>>> stupid_func = (lambda x : x ** 2 + 5)那麼我們為什麼要用上面的表示式?很大一部分原因在於,當我們想執行一些簡單運算時,可以不需要定義真實函式就能完成。例如排序列表元素,一種直觀的方法可以使用 sorted() 方法:>>> print([stupid_func(1), stupid_func(3), stupid_func(5)])
[6, 14, 30]
>>> my_list = [2, 1, 0, -1, -2]這只能預設從大到小或從小到大排序,但是借助 lambda 表示式,我們可以實現更自由的排序標準。如下所示我們希望根據最小的平方數對列表進行排序,其可以使用 lambda 函式定義鍵,從而告訴 sorted() 方法該怎樣排序。>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]
>>> print(sorted(my_list, key = lambda x : x ** 2))[0, -1, 1, -2, 2]
map 是乙個簡單的函式,它可以將某個函式應用到其它一些序列元素,例如列表。如果我們有兩個列表,我們希望將這兩個列表對應的元素相乘,那麼使用 lambda 函式和 map 可以快速實現這一功能:
>>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))上面的**非常優雅,如果不用它們兩者,那麼一般的表達需要寫成這樣:[4, 10, 18]
單行條件語句如果我們使用條件語句,那麼最可能寫成下面這個樣子:
>>> x = int(input())>>> if x >= 10:
>>> print("horse")
>>> elif 1 < x < 10:
>>> print("duck")
>>> else:
>>> print("baguette")
print("horse" if x >= 10 else "duck" if 1 < x < 10 else "baguette")這樣看起來真的非常簡潔,如果你檢視以前寫的**,真的有很多都可以改成這種表示式。
zip()前面在介紹 map() 函式時,我們舉了個例子將某個函式應用到平行的兩個列表,而 zip() 函式可以更簡單地做到這一點。
如果我們有兩個列表,第乙個列表包含了名,第二個列表包含了姓。使用 zip() 函式,如下我們可以將它們拼接在一起。
>>> first_names = ["peter", "christian", "klaus"]>>> last_names = ["jensen", "smith", "nistrup"]
>>> print([' '.join(x) for x in zip(first_names, last_names)])
['peter jensen', 'christian smith', 'klaus nistrup']
也就是說,zip 將兩個等長的列表變為了一對一對的,即 (("peter", "jensen"), ("christian", "smith"), ("klaus", "nistrup"))。
清除浮動的三種實用方法
概念 浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另乙個浮動框的邊框為止。由於浮動框不在文件的普通流中,所以文件的普通流中的塊框表現得就像浮動框不存在一樣。大兄弟你該不會真的把概念讀完並且嘗試理解它?要是真的話,我只能說一句 你牛批 小白是不需要去理解概念的,只需要知道效果到底是啥樣的就o...
5種判斷型別的方法
array.prototype.length 100 var arr new array 1,2,3 console.log arr.proto array.proto 能夠輸出判斷資料型別 string array object boolean 除了null undefined 報錯 consol...
PHP 實用函式5
把乙個數字的二進位制表示形式轉化成十六進製制 string bin2hex string tring 除去字串結尾處的空格 string rtrim string string rtrim的別名 string chop string string 程式設計客棧 從字串的兩頭除去空格 string t...