Python列表解析和字典解析
阿新 • • 發佈:2019-01-13
相比於for迴圈,列表解析的語法是由底層c語言實現的,它和使用for迴圈遍歷pyobject物件相比,效能會有很大的提升。
無條件子句的列表解析式
In [2]: [2*i for i in range(4)]
Out[2]: [0, 2, 4, 6]
帶條件子句的列表解析式
In [13]: [i if i%2==0 else -1 for i in range(7)] Out[13]: [0, -1, 2, -1, 4, -1, 6] In [14]: [i for i in range(7) if i%2==0 else -1] File "<ipython-input-14-09b7845471ee>", line 1 [i for i in range(7) if i%2==0 else -1] ^ SyntaxError: invalid syntax In [15]: [i for i in range(7) if i%2==0] Out[15]: [0, 2, 4, 6] In [18]: [i if i%2==0 for i in range(7)] File "<ipython-input-18-49bed909dcb4>", line 1 [i if i%2==0 for i in range(7)] ^ SyntaxError: invalid syntax
注意:當條件子句在for前時必須帶上else,此時else表示不符合if條件時列表元素的取值;當條件子句在for後時不能帶上else。
多重迴圈的列表解析式
In [3]: [(i,j) for i in [1,3,5] for j in [2,4,6]]
Out[3]: [(1, 2), (1, 4), (1, 6), (3, 2), (3, 4), (3, 6), (5, 2), (5, 4), (5, 6)]
In [11]: matrix Out[11]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] In [12]: [i for row in matrix for i in row] Out[12]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:多重迴圈是有順序的,按照從列表前到列表後的for出現的次序執行。
字典解析
In [19]: {key:value for key,value in [(1,11),(2,22),(3,33)]}
Out[19]: {1: 11, 2: 22, 3: 33}