[表示式 for 疊代變數 in 可疊代物件 [if 條件表示式] ]
此格式中,[if 條件表示式] 不是必須的,可以使用,也可以省略。
for 疊代變數 in 可疊代物件
表示式
a_range = range(10) # 對a_range執行for表示式 a_list = [x * x for x in a_range] # a_list集合包含10個元素 print(a_list)上面程式碼的第 3 行會對 a_range 執行迭代,由於 a_range 相當於包含 10 個元素,因此程式生成的 a_list 同樣包含 10 個元素,且每個元素都是 a_range 中每個元素的平方(由表示式 x*x 控制)。
[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]
b_list = [x * x for x in a_range if x % 2 == 0] # a_list集合包含5個元素 print(b_list)第一行程式碼與程式一中第 3 行程式碼大致相同,只是為這裡給列表推導式增加了 if 條件語句,這會導致推導式只處理 range 區間的偶數,因此程式生成的 b_list 只包含 5 個元素。
[0 ,4 , 16, 36, 64]
d_list = [(x, y) for x in range(5) for y in range(4)] # d_list列表包含20個元素 print(d_list)上面程式碼中,x 是遍歷 range(5) 的疊代變數(計數器),因此該 x 可疊代 5 次;y 是遍歷 range(4) 的計數器,因此該 y 可疊代 4 次。因此,該(x,y)表示式一共會疊代 20 次。上面的 for 表示式相當於如下巢狀迴圈:
dd_list = [] for x in range(5): for y in range(4): dd_list.append((x, y))
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]
e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)] # e_list列表包含120個元素 print(e_list)對於包含多個迴圈的 for 表示式,同樣可指定 if 條件。假如我們有一個需求:程式要將兩個列表中的數值按“能否整除”的關係配對在一起。比如 src_a 列表中包含 30,src_b 列表中包含 5,其中 30 可以整除 5,那麼就將 30 和 5 配對在一起。對於上面的需求使用 for 表示式來實現非常簡單,例如如下程式碼:
src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121] src_b = [3, 5, 7, 11] # 只要y能整除x,就將它們配對在一起 result = [(x, y) for x in src_b for y in src_a if y % x == 0] print(result)執行上面程式碼,可以看到如下輸出結果:
[(3, 30), (3, 12), (3, 66), (3, 39), (3, 78), (3, 36), (3, 57), (5, 30), (11, 66), (11, 121)]
(表示式 for 疊代變數 in 可疊代物件 [if 條件表示式] )
其中,用 [] 括起來的部分,可以使用,也可以省略。a = (x for x in range(1,10)) print(a)執行結果為:
<generator object <genexpr> at 0x0000020BAD136620>
a = (x for x in range(1,10)) print(tuple(a)) 執行結果為: (1, 2, 3, 4, 5, 6, 7, 8, 9)
a = (x for x in range(1,10)) for i in a: print(i,end=' ') print(tuple(a))執行結果為:
1 2 3 4 5 6 7 8 9 ()
a = (x for x in range(3)) print(a.__next__()) print(a.__next__()) print(a.__next__()) a = tuple(a) print("轉換後的元組:",a)執行結果為:
0
1
2
轉換後的元組: ()
{表示式 for 疊代變數 in 可疊代物件 [if 條件表示式]}
其中,用 [] 括起來的部分,可以使用,也可以省略。listdemo = ['C語言中文網','c.biancheng.net'] #將列表中各字串值為鍵,各字串的長度為值,組成鍵值對 newdict = {key:len(key) for key in listdemo} print(newdict)執行結果為:
{'C語言中文網': 6, 'c.biancheng.net': 15}
olddict={'C語言中文網': 6, 'c.biancheng.net': 15} newdict = {v: k for k, v in olddict.items()} print(newdict)執行結果為:
{6: 'C語言中文網', 15: 'c.biancheng.net'}
olddict={'C語言中文網': 6, 'c.biancheng.net': 15} newdict = {v: k for k, v in olddict.items() if v>10} print(newdict)執行結果為:
{15: 'c.biancheng.net'}
{ 表示式 for 疊代變數 in 可疊代物件 [if 條件表示式] }
其中,用 [] 括起來的部分,可以使用,也可以省略。setnew = {i**2 for i in range(3)} print(setnew)執行結果為:
{0, 1, 4}
tupledemo = (1,1,2,3,4,5,6,6) setnew = {x**2 for x in tupledemo if x%2==0} print(setnew)執行結果為:
{16, 4, 36}
dictdemo = {'1':1,'2':2,'3':3} setnew = {x for x in dictdemo.keys()} print(setnew)執行結果為:
{'2', '1', '3'}