列表推導式
lambda表示式
對映函式
單行實現if、elif和else條件判斷
拉鍊函式
1、字串操作
可以使用算數表示式來操作字串,例如 + 和 * :
>>> 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翻譯器:
>>> word_list = ["awesome", "is", "this"]
>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!
上面我們使用.join()方法用空格符號反向連線列表中的所有成員,最後再新增乙個感嘆號。
2、列表推導式
你知道嗎,當我掌握這個技巧時,我感覺整個世界都變了!這種操作列表 的方式真的太強大、直觀而且可讀性高。
例如,假設我們有乙個函式來計算輸入引數的平方再加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:
>>> 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]
coooooooooooooooooooooooooool!
3、lambda表示式
lambda看起來有點怪異,不過和這篇文章中的其他內容一樣,lambda 超級強大,而且一旦你理解了就會發現它其實很直觀。
基本上lambda表示式就是乙個匿名函式。為什麼要匿名?這是因為lambda 表示式通常應用於執行簡單的操作,因此使用def來正式定義乙個函式 就顯得有點累贅了。
讓我們以上面的計算為例看一下lambda的使用方法。在上面的**中 我們使用正式的函式宣告語法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]
為什麼要使用這麼怪異的語法?lambda的好處在於你可以執行一些簡單 的操作而無需提前定義乙個函式。例如,假設有一組數值,我們如何 用python來排序?一種方法是使用sorted()函式:
>>> my_list = [2, 1, 0, -1, -2]
>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]
sorted()預設是按公升序對列表成員排序,但是如果我們希望按成員的 平方和排序,就可以使用lambda表示式了:
>>> print(sorted(my_list, key = lambda x : x ** 2))
[0, -1, 1, -2, 2]
4、對映函式 map
對映函式map()可以使用指定的函式來處理像列表之類的成員序列。例如, 假設我們希望得到兩個列表中對應成員的乘積的結果列表,應該怎麼做? 使用lambda表示式和對映函式就可以了!
>>> 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)):
>>> print(z)
[4, 10, 18]
5、單行條件判斷
在你的**中可能會有這樣的條件判斷邏輯:
>>> x = int(input())
>>> if x >= 10:
>>> print("horse")
>>> elif 1 < x < 10:
>>> print("duck")
>>> else:
>>> print("baguette")
執行上面的**,會提示我們輸入,假設輸入5的話,就會顯示 duck。但是我們可以只用一行**就實現同樣的功能!
print("horse" if x >= 10 else "duck" if 1 < x < 10 else "baguette")
實在是妙!
6、拉鍊函式 zip
上面的對映函式map()對兩個列表中並行地執行某個指定的處理函式。 拉鍊函式zip()比這還要簡單。
假設我們有兩個列表,乙個記錄人名,另乙個記錄姓氏,那麼我們應該 如何合併得到乙個全名列表?答案是使用zip()!
>>> first_names = ["peter", "christian", "klaus"]
>>> last_names = ["nistrup", "smith", "jensen"]
>>> print([' '.join(x) for x in zip(first_names, last_names)])
['peter nistrup', 'christian smith', 'klaus jensen']
lalala...
python6之集合的介紹
集合是無序的,集合中的元素是唯一的,集合一般用於元組或者列表中的元素去重。定義乙個空集合 set1 set 注意以下寫法為乙個空字典,為空缺省是字典,如果有資料在根據格式判斷 set2 新增元素 add,update add set1 新增元素 set1.add 8 update set1 是把要傳...
6個超讚的免費神器工具,拯救貧民窟的你!
1 奶牛快傳 奶牛快傳 是一款大檔案臨時傳輸服務,一款無需註冊即可使用,未註冊使用者支援最大 2gb 檔案,72小時儲存時效,最重要的是,它不限速。並且註冊登入後,檔案大小不限制,最長了儲存168小時。優化的非常好,在國內使用速度超快。1 全自動臉部潤飾2 美妝 使 變光滑 包括去除臉部油光 油脂 ...
介紹Python中6個序列的內建型別
1 python中6個序列的內建型別分別是什麼?python包含6中內建的序列,即列表 元組 字串 unicode字串 buffer物件和 xrange 物件。序列通用的操作包括 索引 長度 組合 序列相加 重複 乘法 分片 檢查成員 遍歷 最小值和最大值。2 列表和元組的異同有哪些?python有...