(一)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编辑  收藏  举报