Python 列表解析


1. 簡單列表解析

假設我們需要創建一個列表為:[0,0,0,0,0,0,  0,0,0,  0](size=10)

顯然這樣寫0很費勁。所以有一種叫做列表解析的東西可以快速生成:

>>> [0 for i in range(10)]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# 還可以按序生成
>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2. 帶條件列表解析

假設我們需要創建一個列表:[0,2,0, 4, 0, 6, 0, 8, 0,  10] (size=10, 奇數為0,偶數不變)

>>> [i+1 if i%2 == 1 else 0 for i in range(10)]
[0, 2, 0, 4, 0, 6, 0, 8, 0, 10]

note: 當條件子句在for前時必須帶上else,此時else表示不符合if條件時列表元素的取值;當條件子句在for后時不能帶上else。不然會報錯!

>>> [i+1 if i%2 == 1 for i in range(10)]
  File "<input>", line 1
    [i+1 if i%2 == 1 for i in range(10)]  # if在前面時,必須有else
                       ^
SyntaxError: invalid syntax

>>> [i+1 for i in range(10) if i%2 == 1 else 0]  
  File "<input>", line 1
    [i+1 for i in range(10) if i%2 == 1 else 0]  # if在后面時,不能有else
                                           ^
SyntaxError: invalid syntax

3. 多重循環的列表解析

假設我們需要根據創建一個列表:[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)](可以看成(1, 2) 和 (1, 2, 3)的全排列)

>>> [(i, j) for i in [1, 2] for j in [1, 2, 3]]
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)]  # perfect!

矩陣降維或者表量化:

>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> array = [i for row in matrix for i in row]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

notes: 注意兩個 for 的先后順序:高維在前!

4.字典解析

假設我們想把列表:[(1, 201), (2, 202), (3, 205)],變成字典 {1: 201, 2: 201, 3: 205}

>>> {k: v for k, v in [(1, 201), (2, 201), (3, 205)]}
{1: 201, 2: 201, 3: 205}  # perfect!

 

任何大神都是從小白當起! 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM