python列表推導(dǎo)和生成器表達(dá)式知識點總結(jié)
首先來看一下代碼:
chars = "abcd" tmp = [] for char in chars: tmp.append(ord(char)) print(tmp)
這是一般的寫法,將字符串中的每一個字符轉(zhuǎn)換稱ASCII碼,然后存進(jìn)一個tmp數(shù)組。
利用列表推導(dǎo)的方式:
tmp = [ord(char) for char in chars]
輸出:[97,98,99,100]
列表推導(dǎo)中也可以使用if和else。
當(dāng)只有一個if時:
chars = "abcd" tmp = [ord(char) for char in chars if ord(char)>=98] print(tmp)
輸出:['b','c','d']
額外提一下,當(dāng)然我們也可以利用filter和map達(dá)到相同的效果:
tmp = list(filter(lambda x:x>=98,map(ord,chars)))
這句話的意思是,使用map對chars中的每一個字符利用ord函數(shù)進(jìn)行處理。再使用filter對這每一個字符的ASCII碼進(jìn)行過濾大于等于98的,最后將這些符合條件的值存進(jìn)一個列表中。lambda x:x>98是一個匿名函數(shù)。
有一個if else時:
chars = "abcd" tmp = [True if ord(char)>=98 else False for char in chars] print(tmp)
輸出:[False, True, True, True]
一般而言,列表推導(dǎo)應(yīng)盡量保持簡短。
再看下一個例子:利用列表推導(dǎo)計算笛卡兒積(以衣服的顏色和尺寸為例)
colors = ["black","white"] sizes = ["S","M","L"] tshirts = [(color,size) for color in colors for size in sizes] print(tshirts)
生成器表達(dá)式可以用于生成其它數(shù)據(jù)類型的序列,雖然列表推導(dǎo)也可以初始化元祖、數(shù)組和其它類型,但是生成器表達(dá)式是更好的選擇。這是因為生成器表達(dá)式背后遵從迭代器協(xié)議,可以逐個產(chǎn)生元素,而不是先建立一個完整的列表。
生成器表達(dá)式語法和列表差不多,只不過把方括號變成圓括號。
用生成器表達(dá)式生成元組和數(shù)組例子:
chars = "abcd" tmp = tuple(ord(char) for char in chars) print(tmp)
輸出:(97, 98, 99, 100)
import array
chars = "abcd"
a = array.array("I",(ord(char) for char in chars))
print(a)
輸出:array('I', [97, 98, 99, 100])
array的構(gòu)造方法須提供兩個參數(shù),第一個是數(shù)組中元素的存儲方式。如果生成器表達(dá)式是唯一的參數(shù),就不用括號括起來,這里不是唯一的,因此要用括號括起來。
colors = ["black","white"]
sizes = ["S","M","L"]
for tshirt in ("%s %s" % (c,s) for c in colors for s in sizes):
print(tshirt)
輸出:
black S
black M
black L
white S
white M
white L
以上就是本次介紹的全部相關(guān)知識點,感謝大家的學(xué)習(xí)和對腳本之家的支持。
相關(guān)文章
python實戰(zhàn)練習(xí)之最新男女顏值打分小系統(tǒng)
前幾天不是出過一期Python美顏相機嘛?不知道大家現(xiàn)在還記不記得?這一期的話題還是緊接著那一期顏值方面來走,對大家的學(xué)習(xí)或工作具有一定的價值,需要的朋友可以參考下2021-09-09
用Python進(jìn)行柵格數(shù)據(jù)的分區(qū)統(tǒng)計和批量提取
該教程其實源于web,我看到之后覺得很實用,于是自己又重復(fù)做了一遍,寫了詳細(xì)的注釋分享給大家,希望對大家的研究有幫助,本文講述了柵格的分區(qū)統(tǒng)計,批量提取,深化理解遍歷循環(huán)等內(nèi)容2021-05-05
opencv中cv2.minAreaRect函數(shù)輸出角度問題詳解
minAreaRect返回的數(shù)據(jù)包括了矩形的中心點,寬、高,和旋轉(zhuǎn)角度,下面這篇文章主要給大家介紹了關(guān)于opencv中cv2.minAreaRect函數(shù)輸出角度問題的相關(guān)資料,需要的朋友可以參考下2022-11-11
Python3內(nèi)置模塊random隨機方法小結(jié)
這篇文章主要介紹了Python3內(nèi)置模塊random隨機方法小結(jié),random是Python中與隨機數(shù)相關(guān)的模塊,其本質(zhì)就是一個偽隨機數(shù)生成器,我們可以利用random模塊基礎(chǔ)生成各種不同的隨機數(shù),以及一些基于隨機數(shù)的操作,需要的朋友可以參考下2019-07-07
python中3種等待元素出現(xiàn)的方法總結(jié)
發(fā)現(xiàn)太多人不會用等待了,小編今天實在是忍不住要給大家講講等待的必要性,下面這篇文章主要給大家介紹了關(guān)于python中3種等待元素出現(xiàn)的方法,需要的朋友可以參考下2022-03-03

