假設咱們須要建立一個列表爲:[0,0,0,0,0,0, 0,0,0, 0](size=10)spa
顯然這樣寫0很費勁。因此有一種叫作列表解析的東西能夠快速生成:code
>>> [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]
假設咱們須要建立一個列表:[0,2,0, 4, 0, 6, 0, 8, 0, 10] (size=10, 奇數爲0,偶數不變)blog
>>> [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。否則會報錯!input
>>> [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
假設咱們須要根據建立一個列表:[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)](能夠當作(1, 2) 和 (1, 2, 3)的全排列)class
>>> [(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 的前後順序:高維在前!di
假設咱們想把列表:[(1, 201), (2, 202), (3, 205)],變成字典 {1: 201, 2: 201, 3: 205}co
>>> {k: v for k, v in [(1, 201), (2, 201), (3, 205)]} {1: 201, 2: 201, 3: 205} # perfect!
任何大神都是從小白當起! 大神