luciano ramalho 舉了這樣乙個示例,把乙個字串轉為 unicode 碼的列表。
傳統寫法是這樣的:
symbols='@#$%^&'
codes=
for symbol in symbols:
執行結果:
info - codes -> [64, 35, 36, 37, 94, 38]
ord() 函式是 chr() 函式(對於8位的ascii字串)或 unichr() 函式(對於unicode物件)的配對函式,它以乙個字元(長度為1的字串)作為引數,返回對應的 ascii 數值,或者 unicode 數值,如果所給的 unicode 字元超出了 python 定義範圍,則會引發 typeerror 異常。而列表推導的寫法是這樣的:
codes=[ord(symbol) for symbol in symbols]
這種寫法給人的第一印象是簡潔。
列表推導使用原則:只用列表推導來建立新的列表,並且盡量保持簡潔。如果列表推導的**超過了兩行,那麼我們就要考慮使用 for 迴圈來重構**。在 python3 中,表示式內部的變數和賦值只在區域性起作用,即具有區域性作用域。因此與外層的同名變數互不影響。
x='abc'
dummy=[ord(x) for x in x]
logging.info('x -> %s',x)
logging.info('dummy -> %s',dummy)
執行結果:
info - x -> abc
info - dummy -> [65, 66, 67]
python 的 filter() 函式用於過濾序列,過濾掉不符合條件的元素,然後返回由符合條件元素組成的新列表。
語法為:
filter(function, iterable)
該函式接收兩個引數,第乙個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判斷,然後返回 true 或 false,最後將返回 true 的元素放到新列表中。
而 map() 會根據提供的函式對指定序列做對映。
第乙個引數 function 以引數序列中的每乙個元素呼叫 function 函式,返回包含每次呼叫 function 函式返回值的新列表。
我們用乙個示例來比較列表推導和 map/filter 組合在寫法上的區別。假設需要把乙個字串轉換為 ascii 碼陣列,該陣列需過濾掉碼值小於 38 的值。
map/filter 組合方式:
list(filter(lambda c:c>37,map(ord,symbols)))
列表推導方式:
[ord(s) for s in symbols if ord(s)>37]
對比發現,列表推導方式的可讀性更高。
笛卡爾乘積是指在數學中,兩個集合x和y的笛卡爾積(cartesian product),又稱直積,表示為x × y,第乙個物件是x的成員而第二個物件是y的所有可能有序對的其中乙個成員。
luciano ramalho 舉了乙個撲克牌的例子,來說明什麼是笛卡爾乘積。含有 4 種花色和 3 種牌面的列表的笛卡兒積,結果是乙個包含 12 個元素的列表。
如果大家對於學習python有任何問題,學習方法,學習路線,如何學習有效率的問題,可以隨時來諮詢我,或者缺少系統學習資料的,我做這行年頭比較久,自認為還是比較有經驗的,可以幫助大家提出建設性建議,這是我的python交流qun:785128166,有任何問題可以隨時來諮詢我。
假設有 3 種不同尺寸(s、m、l)的 t 恤衫,每個尺寸都有 2 個顏色(黑色或白色),尺寸與顏色的笛卡爾積就會得到 6 種組合。
colors=['black','white']
sizes=['s','m','l']
# 先顏色再尺碼
tshirts=[(color,size) for color in colors for size in sizes]
logging.info('tshirts -> %s',tshirts)
# 先尺碼再顏色
tshirts=[(color,size) for size in sizes for color in colors]
logging.info('tshirts -> %s',tshirts)
執行結果:
info - tshirts -> [('black', 's'), ('black', 'm'), ('black', 'l'), ('white', 's'), ('white', 'm'), ('white', 'l')]
info - tshirts -> [('black', 's'), ('white', 's'), ('black', 'm'), ('white', 'm'), ('black', 'l'), ('white', 'l')]
for color in colors for size in sizes
表示先按照顏色排序,然後再按照尺碼排序;而for size in sizes for color in colors
則表示先按照尺碼排序,然後再按照顏色排序。
雙重迭代的順序,也會影響輸出結果:
for color in colors:
for size in sizes:
logging.info('(color,size) -> %s',(color,size))
logging.info('\n')
for size in sizes:
for color in colors:
logging.info('(color,size) -> %s',(color,size))
執行結果:
info - (color,size) -> ('black', 's')
info - (color,size) -> ('black', 'm')
info - (color,size) -> ('black', 'l')
info - (color,size) -> ('white', 's')
info - (color,size) -> ('white', 'm')
info - (color,size) -> ('white', 'l')
info -
info - (color,size) -> ('black', 's')
info - (color,size) -> ('white', 's')
info - (color,size) -> ('black', 'm')
info - (color,size) -> ('white', 'm')
info - (color,size) -> ('black', 'l')
info - (color,size) -> ('white', 'l')
說說在 Python 中如何向函式傳參
位置實參指的是,實參的順序與形參相同。def to read book name,book type 想讀的書 print 我想讀 book name 咯 print 它屬於 book type 領域 to read 現代藝術150年 乙個未完成的故事 藝術 執行結果 我想讀 現代藝術150年 乙個...
說說在 Canvas 中如何新增陰影
canvas 的 context 中有四個引數可以用於設定陰影相關屬性。方法名說明 shadowoffsetx 陰影 x 軸偏移量。可以為正值或負值 負值表示在左側和上方建立陰影,正值表示在底部和右側建立陰影。shadowoffsety 陰影 y 軸偏移量。其它特性與陰影 x 軸偏移量相同。shad...
說說在 Python 中如何處理檔案系統路徑
在 windows 作業系統中,檔案路徑以倒斜槓作為資料夾之間的分隔符。但在 osx 和 linux 上,使用的則是正斜槓作為路徑分隔符。如果希望讓程式適配所有作業系統,就會用到 os.path.join 函式。import os path os.path.join usr local sbin p...