推導式是從一個或者多個迭代器快速建立序列的一種方法。它能夠將循環和條件判斷結合, 從而避免冗長的代碼。推導式是典型的Python 風格,會使用它表明你已經超過Python初 學者的水平。express
列表推導式生成列表對象,語法以下:ide
[表達式 for item in 可迭代對象 ]spa
或者:{表達式 for item in 可迭代對象 if 條件判斷}code
1 #列表推導式 2 x = [x for x in range(1,5)] 3 print(x) 4 5 x = [x*2 for x in range(1,5)] 6 print(x) 7 8 x = [x*2 for x in range(1,100) if x%5 == 0] 9 print(x) 10 11 x = [x for x in 'abcdefg'] 12 print(x) 13 14 cells = [(row,col) for row in range(1,5) for col in range(1,5)] #能夠使用兩個循環 15 print(cells) 16 for cell in cells: 17 print(cell)
字典的推導式生成字典對象,格式以下: {key_expression : value_expression for 表達式 in 可迭代對象}對象
相似於列表推導式,字典推導也能夠增長 if條件判斷、多個 for 循環。blog
1 #統計字符出現的次數 2 text = 'i love you, i love me, i love family' 3 char_count = {c:text.count(c) for c in text} 4 print(char_count)
集合推導式生成集合,和列表推導式的語法格式相似: {表達式 for item in 可迭代對象 } 或者:{表達式 for item in 可迭代對象 if 條件判斷}ci
1 #集合推導式:集合的底層是字典(只有字典的key,沒有字典的values) 2 x = {x for x in range(1,100) if x%9 == 0} 3 print(x)
元組有沒有推導式?generator
>>> (x for x in range(1,100) if x%9==0)it
<generator object <genexpr> at 0x0000000002BD3048>io
咱們發現提示的是「一個生成器對象」。顯然,元組是沒有推導式的。
一個生成器只能運行一次。第一次迭代能夠獲得數據,第二次迭代數據就沒有了(須要從新生成一個生成器)。
1 #生成器推導式(生成元組) 2 gnt = (x for x in range(1,100) if x%9 == 0) 3 print(gnt) 4 for x in gnt: #循環遍歷生成器對象gnt 5 print(x,end='\t') 6 for x in gnt: #再次循環遍歷生成器對象gnt,發現沒有數據了 7 print(x,end='\t')
1. 【操做】繪製多個同心圓
1 import turtle 2 t = turtle.Pen() 3 t.width(4) 4 t.speed(10) 5 my_colors = ('red','green','yellow','black') 6 for i in range(10): #0 1 2 3 4 5 7 t.penup() 8 t.goto(0,-i*5) #0 5 10 15 20 25 9 t.pendown() 10 t.color(my_colors[i%my_colors.__len__()]) 11 t.circle(10+i*5) #10 15 20 25 30 35 12 13 turtle.done() #程序執行完,窗口仍然在
2. 【操做】繪製18*18 棋盤
1 #繪製18*18的棋盤 2 import turtle 3 width = 20 4 num = 18 5 x1 = [(-200,200),(-200+width*num,200)] 6 y1 = [(-200,200),(-200,200-width*num)] 7 t = turtle.Pen() 8 t.speed(10) 9 # t . g o t o ( x 1 [ 0 ] [ 0 ] , x 1 [ 0 ] [ 1 ] ) 10 # t . g o t o ( x 1 [ 1 ] [ 0 ] , x 1 [ 1 ] [ 1 ] ) 11 for i in range(0,19): 12 t.penup() 13 t.goto(x1[0][0],x1[0][1]-20*i) 14 t.pendown() 15 t.goto(x1[1][0],x1[1][1]-20*i) 16 for i in range(0,19): 17 t.penup() 18 t.goto(y1[0][0]+20*i,y1[0][1]) 19 t.pendown() 20 t.goto(y1[1][0]+20*i,y1[1][1]) 21 t.hideturtle() # 隱 藏 畫 筆 22 turtle.done() # 保 證 運 行 窗 口 不 被 自 動 關 閉