Python 入门笔记11——推导式

控制语句

  变量、数据类型(整数、浮点数、布尔)、序列(字符串、列表、元组、字典、集合),可以看做是数据的组织方式。数据可以看做是“砖块”!
  流程控制语句是代码的组织方式,可以看做是“混凝土”。
  一个完整的程序,离不开“砖块”,也离不开“混凝土”。他们的组合,才能让我们建立从小到“一个方法”,大到“操作系统”,这样各种各样的“软件”。

使用 zip()并行迭代

  我们可以通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。
代码示例:

names = ("russell1", "russell2", "russell3")
ages = ("18", "19", "20", "21")
jobs = ("programmer", "datascientist", "teacher", "businessman")

for name, age, job in zip(names, ages, jobs):
    print("name:{0}, age:{1}, job:{2}".format(name, age, job))

执行结果:

name:russell1, age:18, job:programmer
name:russell2, age:19, job:datascientist
name:russell3, age:20, job:teacher

推导式创建序列

  推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初学者的水平。

列表推导式

列表推导式生成列表对象,语法如下:

[表达式 for item in 可迭代对象 ]
或者:{表达式 for item in 可迭代对象 if 条件判断}

代码示例:

>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [x for x in range(10) if x % 2 == 0]
[0, 2, 4, 6, 8]
>>> [a for a in "123456789"]
['1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> [(row,col) for row in range(3) for col in range(3)] # 可以使用两个循环
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

字典推导式

  字典的推导式生成字典对象,格式如下:

{key_expression : value_expression for 表达式 in 可迭代对象}

  类似于列表推导式,字典推导也可以增加 if 条件判断、多个 for 循环。

代码示例:统计文本中字符出现的次数:

my_text = "i love study, my name is learning forever"
count_dict = {
    
    c:my_text.count(c) for c in my_text}
print(count_dict)

执行结果:

{
    
    'i': 3, ' ': 7, 'l': 2, 'o': 2, 'v': 2, 'e': 5, 's': 2, 't': 1, 'u': 1, 'd': 1, 'y': 2, ',': 1, 'm': 2, 'n': 3, 'a': 2, 'r': 3, 'g': 1, 'f': 1}

集合推导式

  集合推导式生成集合,和列表推导式的语法格式类似:

{表达式 for item in 可迭代对象 }
或者:{表达式 for item in 可迭代对象 if 条件判断}

代码示例:

>>> {
    
    x for x in "abcbdabcdca"}
{
    
    'c', 'a', 'd', 'b'}

生成器推导式(生成元组)

  元组是没有推导式的。使用小括号生成的是一个生成器对象:

(表达式 for item in 可迭代对象 )
或者:(表达式 for item in 可迭代对象 if 条件判断)

代码示例:

>>> (x for x in range(10))
<generator object <genexpr> at 0x000001F4D5C90200>

  一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。

代码示例:

>>> gnrt = (x for x in range(10))
>>> list(gnrt)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(gnrt)
[]

画图练习:

  1. 绘制多个同心圆
    代码示例:
import turtle as t

for i in range(5):
    colors = ["red", "blue", "yellow", "orange", "black"]
    t.color(colors[i])
    t.circle((i+1)*10)
    t.penup()
    t.goto((0,-(i+1)*10))
    t.pendown()
t.done()

执行结果:
在这里插入图片描述

  1. 绘制 18*18 棋盘
import turtle as t
width = 30
num = 18
x1 = [(-400,400),(-400+width*num,400)]
y1 = [(-400,400),(-400,400-width*num)]


t.speed(10)
for i in range(19):
    t.penup()
    t.goto(x1[0][0],x1[0][1]-30*i)
    t.pendown()
    t.goto(x1[1][0],x1[1][1]-30*i)

for j in range(19):
    t.penup()
    t.goto(y1[0][0]+30*j,y1[0][1])
    t.pendown()
    t.goto(y1[1][0]+30*j,y1[1][1])

t.done()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45031468/article/details/112189231