91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 知識點: 列表推導式(list comprehension)

發布時間:2020-08-11 02:24:53 來源:ITPUB博客 閱讀:198 作者:XIAOYUANYUAN 欄目:編程語言

Python里面有個很棒的語法糖(syntactic sugar),它就是  list comprehension  ,有人把它翻譯成“列表推導式”,也有人翻譯成“列表解析式”。名字聽上去很難理解,但是看它的語法就很清晰了。雖然名字叫做 list comprehension,但是這個語法同樣適用于dict、set等這一系列可迭代(iterable)數據結構。

語法規范:

out_list = [out_express for out_express in input_list if out_express_condition]

其中的  if  條件判斷根據需要可有可無。

下面看一個具體的例子,生成一個包含10以內的偶數的list:

In [1]: evens = [i for i in range(10) if i % 2 == 0]
In [2]: evens
Out[2]: [0, 2, 4, 6, 8]

由for循環升級到列表推導式:

在沒有了解 list comprehension 之前,上面那個生成偶數list的通常做法是用 for 循環:

evens = []for i in range(10):    if i % 2 == 0:
        evens.append(i)

很明顯, for 循環占用了4行代碼,而  list comprehension  只用了1行代碼。

文章開始說到推導式的語法規范時,我們講了 if 表達式是可有可無的,這也符合我們編程遇到的實際情況。比如,要生成一個10以內的整數的平方的列表:

squares = [i**2 for i in range(10)]

復雜的嵌套循環

我們先來看一個例子,把一個矩陣(以列表為元素的列表)展平為一個列表。首先,我們用 for 循環來實現一下:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]
flattened = []for row in matrix:    for i in row:
        flattened.append(i)

接著我們用列表推導式實現該功能:

flattened = [i for row in matrix for i in row]

還是一行代碼就搞定,但一行里面有兩個 for ,看起來很亂,兩個 for ,哪個在前哪個在后呢? 只要記住他們的順序和不用推導式的原始for循環是一致的即可。

推導式的可讀性

一行代碼搞定幾行代碼的事情,看上去很簡潔,但是讀起來很費勁,尤其是當條件語句很長的時候,把這一行代碼變得很長,超過了代碼規范規定的長度(一般是80個字符),也使得理解代碼變得困難。

面對一行長長的代碼該如何下口讀,如何理解呢?別著急,好在Python允許在中括號、花括號之間斷行:

列表推導式的斷行:

斷行前:

evens = [i for i in range(10) if i % 2 == 0]

斷行后:

evens = [    i    for i in range(10)    if i % 2 == 0]

帶嵌套循環的推導式的斷行:

斷行前:

flattened = [i for row in matrix for i in row]

斷行后:

flattened = [
    i    for row in matrix    for i in row
]

字典(dict)和集合(set)的推導式:

前面我們也提到過,推導式不僅僅適用于列表,它同樣使用于字典dict和集合set。

把一個字典的key和value互換:

changed = {value: key for key, value in input_dict.items()}

用一個列表的所有單詞的首字母生成一個集合:

chars = {w[0] for w in words_list}

通過以上講解就可以輕松掌握Python的列表推導式( list comprehension )了,簡而言之, 就是把普通的多行for循環壓縮成一行代碼,這種壓縮語法適用于列表、字典、集合等可迭代數據結構(iterables)。


在這里跟大家一起分享Python知識,一方面我自已也在寫一個 Python教程 的博客: 猿人學 和公從號猿人學Python,從Python基礎教程到 Python技術雜談 ,和一些利用 Python爬蟲掙錢的思路 ,都在我的個人博客中首發,興趣的朋友可以關注一下。



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九龙坡区| 屏东市| 凤庆县| 开化县| 新干县| 怀集县| 布尔津县| 赤峰市| 牡丹江市| 英德市| 根河市| 四川省| 读书| 荆州市| 宣化县| 大新县| 民丰县| 桐庐县| 丹巴县| 瓮安县| 八宿县| 宣武区| 望都县| 五原县| 南投县| 奉节县| 平乐县| 剑阁县| 新泰市| 凌海市| 南康市| 临安市| 嘉荫县| 略阳县| 长垣县| 牙克石市| 财经| 清远市| 山西省| 万宁市| SHOW|