(一)Python入门-4控制语句:10推导式创建序列-列表推导式-字典推导式-集合推导式-生成器推导式
推导式创建序列:
推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。推导式是典型的Python 风格,会使用它代表你已经超过Python初 学者的水平。
一:列表推导式
列表推导式生成列表对象,语法如下:
[表达式 for item in 可迭代对象 ]
或者:{表达式 for item in 可迭代对象 if 条件判断}
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 循环。
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 条件判断}
1 #集合推导式:集合的底层是字典(只有字典的key,没有字典的values) 2 x = {x for x in range(1,100) if x%9 == 0} 3 print(x)
四:生成器推导式(生成元组)
元组有没有推导式?
>>> (x for x in range(1,100) if x%9==0)
<generator object <genexpr> at 0x0000000002BD3048>
我们发现提示的是“一个生成器对象”。显然,元组是没有推导式的。
一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代数据就没有了(需要重新生成一个生成器)。
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() # 保 证 运 行 窗 口 不 被 自 动 关 闭
posted on 2019-05-11 23:33 JACK#zhang 阅读(340) 评论(0) 编辑 收藏 举报