python6翻 6個超讚的Python小技巧

2021-10-11 13:16:34 字數 3540 閱讀 4710

列表推導式

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有...