當下,Python 比以往的任何時候都更加流行,人們每天都在實踐著 Python 是多麼的強大且易用。 我從事 Python 編程已經有幾年時間了,但是最近6個月才是全職的。下麵列舉的這些事情,是我最開始使用 Python 的時候,就希望清楚的: 字元串操作 列表推導 Lambda 和 Map 函數 ...
當下,Python 比以往的任何時候都更加流行,人們每天都在實踐著 Python 是多麼的強大且易用。
我從事 Python 編程已經有幾年時間了,但是最近6個月才是全職的。下麵列舉的這些事情,是我最開始使用 Python 的時候,就希望清楚的:
- 字元串操作
- 列表推導
- Lambda 和 Map 函數
- 在一行里使用 if elif 和 else 條件判斷
- zip() 函數
這裡註意:不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,裡面很多新python教程項目,還可以跟老司機交流討教!
字元串操作
Python 非常擅長使用類似數學運算符 + 和 * 來操作字元串
>>> my_string = "Hi Medium..!"
>>> print(my_string * 2)
Hi Medium..!Hi Medium..!
>>> print(my_string + " I love Python" * 2)
Hi Medium..! I love Python I love Python
複製代碼
我們也可以非常方便的對字元串做取反操作,只需要使用 [::-1] 就可以,同時該操作還不僅僅局限於字元串操作。
>>> print(my_string[::-1])
!..muideM iH
>>> my_list = [1,2,3,4,5]
>>> print(my_list[::-1])
[5, 4, 3, 2, 1]
複製代碼
那麼對於包含多個字元串的列表呢,我們甚至可以做一個 Yoda-translator !
>>> word_list = ["awesome", "is", "this"]
>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!
複製代碼
在上面的代碼中,我們使用了 .join() 方法,用空格把反轉列表裡的元素拼接了起來,並且增加了感嘆號。
列表推導
哦,天啊!一旦我知道了這些,我的整個世界都改變了(可能還沒有真實發生,但是已經接近了)。這是以中國強大的、直觀的且可讀的方法來快速的操作列表。
假如我們有這樣一個函數,取一個數的平方再增加5
>>> def stupid_func(x):
>>> return x**2 + 5
複製代碼
現在如果我們要把該函數應用到一個列表的所有奇數當中,如果不瞭解列表推導式,你可能會這麼寫
>>> my_list = [1, 2, 3, 4, 5]
>>> new_list = []
>>> for x in my_list:
>>> if x % 2 != 0:
>>> new_list.append(stupid_func(x))
>>> print(new_list)
[6, 14, 30]
複製代碼
但是我們還有更簡單的方法!
>>> my_list = [1, 2, 3, 4, 5]
>>> print([stupid_func(x) for x in my_list if x % 2 != 0])
[6, 14, 30]
複製代碼
列表推導適用於 [ expression for item in list ] 條件,同時如果那你想要應用一些布爾條件,例如上面獲取奇數的條件: [ expression for item in list if conditional ],那麼它和下麵的寫法是一致的
>>> for item in list:
>>> if conditional:
>>> expression
複製代碼
很酷,不過我們還可以做的更好,因為我們根本不需要函數“stupid_func”
>>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])
[6, 14, 30]
複製代碼
Lambda 和 Map
Lambda
Lambda 有一點奇怪,但是就像我介紹的其他內容一樣,只要你去只用它,就會發現它是多麼的強大和直觀。
Lambda 其實就是一個小的匿名函數。為什麼要匿名呢?這是因為 Lambda 常常用來執行小型簡單的操作,而這些操作往往不需要使用 def my_function() 來定義正式的函數
我們還是以上面的例子為例,對一個數進行平方並加5。在上面的代碼中我們定義了一個函數 def stupid_func(x),現在讓我們使用 Lambda 來重新創建它
>>> stupid_func = (lambda x : x ** 2 + 5)
>>> print([stupid_func(1), stupid_func(3), stupid_func(5)])
[6, 14, 30]
複製代碼
那麼,為什麼要使用這種奇怪的語法呢?其實這種寫法的用處就體現在,我們不要定義實際的功能,就可以實現一些簡單的操作。我們繼續以數字列表為例,如果我們想對下麵的列表進行排序,一種方法是使用 sorted()
>>> my_list = [2, 1, 0, -1, -2]
>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]
複製代碼
這樣確實可以了,但是,如果我們想按照元素平方數的大小來排序,使用 Lambda 就非常方便了。可以使用 Lambda 來定義 sorted() 函數用於排序的 key
>>> print(sorted(my_list, key = lambda x : x ** 2))
[0, -1, 1, -2, 2]
複製代碼
Map
Map 是一個用來將函數應用到序列的每個元素上,比如列表。假設我們必須要列出兩個列表對應位置元素的乘積,那麼該怎麼做呢,可以使用 Lambda 和 Map
>>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))
[4, 10, 18]
複製代碼
和下麵的代碼相比,Lambda 與 Map 的組合實在是太優雅了
>>> x, y = [1, 2, 3], [4, 5, 6]
>>> z = []
>>> for i in range(len(x)):
>>> z.append(x[i] * y[i])
>>> print(z)
[4, 10, 18]
複製代碼
在一行里使用 if elif 和 else 條件判斷
有時,你可能會寫出如下的代碼
>>> x = int(input())
>>> if x >= 10:
>>> print("Horse")
>>> elif 1 < x < 10:
>>> print("Duck")
>>> else:
>>> print("Baguette")
複製代碼
運行此命令時,系統會提示你從 input() 函數輸入內容,假設我們輸入5,我們將得到 Duck。 但是我們也可以像下麵這樣寫
print("Horse" if x >= 10 else "Duck" if 1 < x < 10 else "Baguette")
複製代碼
這實在是太簡單了!快去閱讀你的舊代碼,你會發現有太多的地方可以將這種簡單的 if else 判斷替換成這種單行判斷。
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']
複製代碼
哇哦,有個地方錯了,我的名字不叫 Peter Jensen,那麼就可以調整如下
>>> print([' '.join(x) for x in zip(first_names, last_names[::-1])])
['Peter Nistrup', 'Christian Smith', 'Klaus Jensen']
複製代碼
結束語
我這裡只是彙總了一個簡單的清單,另外大家要註意:不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,裡面很多新python教程項目,還可以跟老司機交流討教!
本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。