Python入门【推导式创建序列、字典推导式、集合推导式】(九)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白
📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人

🔥🔥🔥 python入门到实战专栏:从入门到实战
🔥🔥🔥 Python爬虫开发专栏:从入门到实战
🔥🔥🔥 Python办公自动化专栏:从入门到实战
🔥🔥🔥 Python数据分析专栏:从入门到实战
🔥🔥🔥 Python前后端开发专栏:从入门到实战   

目录

推导式创建序列

字典推导式

集合推导式


推导式创建序列

推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。

❤️推导式是典型的Python风格,会使用它,代表你已经超过 Python初学者的水平。 

列表推导式 

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

[表达式  for  item  in 可迭代对象 ] 或者:{表达式  for  item  in 可迭代对象  if  条件判断}
[x for x in range(1,5)] #[1, 2, 3, 4]
[x*2 for x in range(1,5)] #[2, 4, 6, 8]
[x*2 for x in range(1,20) if x%5==0 ] #[10,20, 30]
[a  for  a  in "abcdefg"] #['a', 'b', 'c','d', 'e', 'f', 'g']
#可以使用两个循环,使用zip并行迭代
cells = [(row,col) for  row,col in
zip(range(1,10),range(101,110))]
print(cells)
a = [x for x in range(1,10) if x%2==0]
print(a)
#不适用推导式,生成列表。二者对比。体现推导式的优势
b = []
for x in range(1,10):
    if x%2==0:
        b.append(x)
print(b)

字典推导式

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

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

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

values = ["北京","上海","深圳","广州"]
cities = {id*100:city for id,city in zip(range(1,5),values)}
print(cities)

 生成字典对象:

{100: '北京'
, 200: '上海'
, 300: '深圳'
, 400:
'广州'}

统计文本中字符出现的次数:

my_text = ' i love you, i love sxt, i love tong'
char_count = {c:my_text.count(c) for c in my_text}
print(char_count)

结果输出:

{' ': 9, 'i': 4, 'l': 3, 'o': 5, 'v': 3, 'e':
3, 'y': 1, 'u': 1, ',': 2, 's': 1, 'x': 1,
't': 1, 'g': 1, 'a': 1, 'q': 1}

集合推导式

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

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

>>> {x for x in range(1,100) if x%9==0} {99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}

生成器推导式(不直接生成元组) 

很多同学可能会问:“都有推导式,元组有没有?”,能不能用小括号呢?

>>> (x for x in range(1,100) if x%9==0)
<generator object <genexpr> at 0x0000000002BD3048>

我们发现提示的是“一个生成器对象”。显然,元组是没有推导式的。

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

gnt = (x for x in range(1,100) if x%9==0)
for x in gnt:
    print(x,end=' ')
for x in gnt:
    print(x,end=' ')

 实时效果反馈

1. 如下列表推导式的代码,输出的是:

 [x*2 for x in range(1,20) if x%5==0 ]

A [5,10,15,20,25]

B [5,10,15, 20, 25,30]

C [1, 2, 3]

D [10, 20, 30]

2. 如下是字典推导式代码,输出的是:

values = ["北京","上海","深圳","广州"]
cities = {id*100:city for id,city in zip(range(1,5),values)}
print(cities)

A {'北京':1, '上海':2, '深圳':3, '广州':4}

B {'北京':100, '上海':200, '深圳':300, '广州':400}

C {100: '北京', 200: '上海', 300: '深圳', 400: '广州'}

D {1: '北京', 2: '上海', 3: '深圳', 4: '广州'}

综合练习 

1 、【操作】绘制多个同心圆

import turtle
p = turtle.Pen()  #画笔对象
radius = [x*10 for x in range(1,11)]  
#10,20,30,40...
my_colors = ("red","green","yellow","black")
p.width(4)
for r,i in zip(radius,range(len(radius))):
    p.penup()
    p.goto(0,-r)
    p.pendown()
    p.color(my_colors[i%len(my_colors)])
    p.circle(r)
turtle.done()  #程序执行完毕,窗口在

2 、【操作】绘制18*18棋盘

#画棋盘
import turtle
width = 30
num = 18
x1 = [(-400,400),(-400+width*num,400)]
y1 = [(-400,400),(-400,400-width*num)]
t = turtle.Pen()
t.speed(10)
# t.goto(x1[0][0],x1[0][1])
# t.goto(x1[1][0],x1[1][1])
for i in range(num+1):
    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 i in range(num+1):
    t.penup()
    t.goto(y1[0][0]+30*i,y1[0][1])
    t.pendown()
    t.goto(y1[1][0]+30*i,y1[1][1])
t.hideturtle()   #隐藏画笔
turtle.done()   #保证运行窗口不被自动关闭

实操作业

1 输入一个学生的成绩,将其转化成简单描述:不及格(小于60)、 及格(60-79)、良好(80-89)、优秀(90-100)

2 已知点的坐标(x,y),判断其所在的象限

3 输入一个分数。分数在0-100之间。90以上是A,80以上是B,70 以上是C,60以上是D。60以下是E

4 利用while循环,计算1-100之间数字的累加和;计算1-100之间 偶数的累加和,计算1-100之间奇数的累加和

5 利用for循环,计算1-100之间数字的累加和;计算1-100之间偶 数的累加和,计算1-100之间奇数的累加和

6 打印如下图案:

7、利用嵌套循环打印九九乘法表 

8 用列表和字典存储下表信息,并打印出表中工资高于15000的数据

9、要求输入员工的薪资,若薪资小于0则重新输入。最后打印出录 入员工的数量和薪资明细,以及平均薪资

10 员工一共4人。录入这4位员工的薪资。全部录入后,打印提示 “您已经全部录入4名员工的薪资”。最后,打印输出录入的薪资和平均薪资 

 11 使用海龟绘图,绘制同心圆:

12 使用海龟绘图,绘制18*18的棋盘:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值