python 列表解析式

python的列表解析式只是爲了解決已有問題提供新的語法python

 

什麼是列表解析式?app

列表解析式是將一個列表轉換成另外一個列表的工具。在轉換過程當中,能夠指定元素必須符合必定的條件,才能添加至新的列表中,這樣每一個元素均可以按須要進行轉換。函數

 

能夠把列表解析式看做爲結合了filter函數與map函數功能的語法糖工具

doubled_odds = map(lambda n: n * 2, filter(lambda n: n % 2 == 1, numbers))
doubled_odds = [n * 2 for n in numbers if n % 2 == 1]

 

每一個列表解析式均可以重寫爲for循環,但不是每一個for循環都能重寫爲列表解析式。spa

:::python
new_things = []
for ITEM in old_things:
    if condition_based_on(ITEM):
        new_things.append("something with " + ITEM)

你能夠將上面的for循環改寫成這樣的列表解析式:

:::python
new_things = ["something with " + ITEM for ITEM in old_things if condition_based_on(ITEM)]

 

若是要在列表解析式中處理嵌套循環,請記住for循環子句的順序與咱們原來for循環的順序是一致的code

:::python
flattened = []
for row in matrix:
    for n in row:
        flattened.append(n)

下面這個列表解析式實現了相同的功能:

:::python
flattened = [n for row in matrix for n in row]

 

注意可讀性blog

若是較長的列表解析式寫成一行代碼,那麼閱讀起來就很是困難。

不過,還好Python支持在括號和花括號之間斷行。

列表解析式 List comprehension
斷行前:

:::python
doubled_odds = [n * 2 for n in numbers if n % 2 == 1]

斷行後:

:::python
doubled_odds = [
    n * 2
    for n in numbers
    if n % 2 == 1
]

 參考https://codingpy.com/article/python-list-comprehensions-explained-visually/get

相關文章
相關標籤/搜索