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