日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1 從示例說起

Luciano Ramalho 舉了這樣一個示例,把一個字符串轉為 Unicode 碼的列表。

傳統寫法是這樣的:

symbols='@#$%^&'
codes=[]
for symbol in symbols:
    codes.Append(ord(symbol))

運行結果:

INFO - codes -> [64, 35, 36, 37, 94, 38]

ord() 函數是 chr() 函數(對于8位的ASCII字符串)或 unichr() 函數(對于Unicode對象)的配對函數,它以一個字符(長度為1的字符串)作為參數,返回對應的 ASCII 數值,或者 Unicode 數值,如果所給的 Unicode 字符超出了 Python/ target=_blank class=infotextkey>Python 定義范圍,則會引發 TypeError 異常。

而列表推導的寫法是這樣的:

codes=[ord(symbol) for symbol in symbols]

這種寫法給人的第一印象是簡潔。

列表推導使用原則:只用列表推導來創建新的列表,并且盡量保持簡潔。如果列表推導的代碼超過了兩行,那么我們就要考慮使用 for 循環來重構代碼。

2 局部作用域

在 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]

3 比較列表推導和 map/filter 組合

3.1 filter()

Python 的 filter() 函數用于過濾序列,過濾掉不符合條件的元素,然后返回由符合條件元素組成的新列表。

語法為:

filter(function, iterable)

該函數接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判斷,然后返回 True 或 False,最后將返回 True 的元素放到新列表中。

3.2 map()

而 map() 會根據提供的函數對指定序列做映射。

第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次調用 function 函數返回值的新列表。

3.3 比較

我們用一個示例來比較列表推導和 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]

對比發現,列表推導方式的可讀性更高。

4 計算笛卡兒積

笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員。

Luciano Ramalho 舉了一個撲克牌的例子,來說明什么是笛卡爾乘積。含有 4 種花色和 3 種牌面的列表的笛卡兒積,結果是一個包含 12 個元素的列表。

一文了解在 Python 中如何使用列表推導

 

假設有 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')

不知道發什么了剛好看到這個就發出來了,需要大廠資料的可以s信小編

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定