• (一)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='	')
    6 for x in gnt:  #再次循环遍历生成器对象gnt,发现没有数据了
    7     print(x,end='	')

    五:综合练习

      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()    # 保 证 运 行 窗 口 不 被 自 动 关 闭
  • 相关阅读:
    利用Powerdesigner16.5(64位)连接64位oracle 配置系统odbc驱动
    Commons BeanUtils 中对Map的操作
    java内存模型与线程
    类加载器详解
    虚拟机性能监控与故障处理工具
    ENode框架Conference案例分析系列之
    ENode框架Conference案例分析系列之
    225.优化路径选择
    224.CAD相关操作
    223.概率统计
  • 原文地址:https://www.cnblogs.com/jack-zh/p/10836416.html
Copyright © 2020-2023  润新知