👏作者简介:大家好,我是爱敲代码的小王,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的棋盘: